Hay muchas diferencias entre <%# Eval %>
y <%# DataBinder.Eval %>
bajo las sábanas, a pesar de que the documentation afirma que el uso de Eval
(TemplateControl.Eval
para ser exactos) en realidad llama DataBinder.Eval
y que su tarea es hacer exactamente el mismo trabajo.
Eso es correcto, pero usar solo Eval
significa que ASP.NET resuelve el objeto que está enlazado a datos. Lo hace internamente con una pila donde se agregan elementos cuando se llama al Control.DataBind()
. El truco es que esto ocurre solo si la propiedad Page
del control no es null
en ese punto.
Si la pila Page
gestionada por no es hasta la fecha cuando se llega a tal punto que DataItem
necesita ser resuelto, el método Page.GetDataItem()
dará una excepción con un mensaje como métodos
enlace de datos, tales como Eval()
, XPath()
y Bind()
solo se pueden usar en el contexto de un control de datos.
DataBinder.Eval
todavía trabaja en esas circunstancias, ya que la proporcione el objeto de destino de forma manual, por lo que ASP.NET no tiene que hacer ningún resolver por sí solo.
Ahora usted tiene su respuesta ... y fue eco 2 veces :) –
jajaja, sí, gracias. – Xaisoft