net asp asp.net data-binding eval

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() y Bind() 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