asp.net - asp - <%# eval
<%#Eval("Estado")%> o<%#DataBinder.Eval(Container.DataItem, "estado")%> (5)
Eval ("State") es una forma simplificada de la sintaxis DataBinder.Eval (Container.DataItem, "State"). Solo funciona dentro de los controles de plantilla vinculados a datos.
Para obtener más información, consulte la documentación de MSDN .
¿Cuál es la diferencia entre tener
<%# Eval("State") %>
en tu página aspx
, versus tener
<%# DataBinder.Eval(Container.DataItem, "State") %>
en tu página aspx
?
Hay muchas diferencias entre <%# Eval %>
y <%# DataBinder.Eval %>
debajo de las cubiertas, aunque la documentación indica que el uso de Eval
( TemplateControl.Eval
para ser exactos) en realidad llama a DataBinder.Eval
y que su tarea es hacer exactamente el mismo trabajo.
Eso es correcto, pero usar solo Eval
significa que ASP.NET mismo resuelve el objeto que está enlazado a datos. Hace esto internamente con una pila donde los elementos se agregan cuando se llama a Control.DataBind()
. El truco es que esto sucede solo si la propiedad de página del control no es null
en ese punto.
Si la pila administrada por la Page
no está actualizada cuando llega al punto de que DataItem
necesita resolverse, el método Page.GetDataItem()
dará una excepción con un mensaje como
Los métodos de enlace de datos como
Eval()
,XPath()
yBind()
solo se pueden usar en el contexto de un control de datos.
DataBinder.Eval
aún funciona en esas circunstancias porque usted le proporciona el objeto de destino manualmente, por lo que ASP.NET no necesita resolver por sí mismo.
He visto el siguiente código
<%# (DataBinder.Eval(Container.DataItem, "ApplicationId").ToString() == "-1" ? "N/A" : Eval("ApplicationId").ToString()) %>
Así que supongo que son un poco diferentes.
No hay diferencia. El método "Eval" es solo un atajo para el método DataBinder.Eval (Container.DataItem, "blah").
el método Eval es solo un atajo de este último