2010-04-13 17 views
5

Estoy tratando de entender cómo Eval() funciona para un propósito específico. Estoy trabajando en un proyecto que realmente no sé y necesito leer algunos datos y ponerlos en la lista desplegable. Estos datos ya se leen y se muestran dentro de una plantilla de elemento. Noté que se leen usando el método Eval(). Algo así como:ASP .NET - ¿Qué está pasando detrás de un Eval()?

<ItemTemplate> 
    <a href="...=<%# Eval("foo") %>></a> 
</ItemTemplate> 

Necesito saber dónde Eval está recibiendo estos datos con el fin de descubrir dónde debería leerlos para mi lista desplegable! ¡Pero realmente no entendía cómo funciona! Sé que Eval() evalúa las expresiones de enlace de datos en el tiempo de ejecución, pero ¿dónde crees que debería echarle un vistazo?

Gracias

Respuesta

2

Eval es un acceso directo, más o menos. Sin embargo, es una llamada a método real, a diferencia de Bind, que se parece más a un fragmento de código.

El artículo de MSDN en Data-Binding Expressions debería darle una visión general muy buena.

En pocas palabras, el analizador, cuando lee la página, llama al DataBinder.Eval y pasa el DataItem actual en contexto junto con la cadena que está especificando. Es muy parecido a leer columnas de un DataReader.

El DataItem en contexto depende de dónde está sucediendo esto. En, por ejemplo, un GridView, esto probablemente será como un objeto DataRow en un DataTable al que GridView estaba vinculado, pero puede ser cualquier objeto realmente, ya que funciona a través de la reflexión. En el caso de un DataRow, Eval ("Foo") intentaría extraer datos de la columna Foo del DataRow.

Puedes ver ahora donde esto podría ir mal. Si DataRow deja de incluir una columna Foo, la llamada de evaluación fallará miserablemente, pero no hasta el tiempo de ejecución dado que no existe una verificación de tipo/nombre fuerte.

Cuestiones relacionadas