2008-11-06 22 views

Respuesta

37

Eval ("Estado") es una forma simplificada de la DataBinder.Eval (Container.DataItem, "Estado") sintaxis. Solo funciona dentro de los controles de plantilla vinculados a datos.

Para obtener más información, consulte the MSDN documentation.

11

No hay diferencia. El método "Eval" es solo un atajo para el método DataBinder.Eval (Container.DataItem, "blah").

4

el método Eval es sólo un acceso directo de este último

-5

he visto siguiente código

<%# (DataBinder.Eval(Container.DataItem, "ApplicationId").ToString() == "-1" ? "N/A" : Eval("ApplicationId").ToString()) %> 

así que supongo que un poco diferente.

8

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.

+2

cuando se produce el siguiente error, 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." entonces deberíamos usar <% # DataBinder.Eval%> en lugar de <%#Eval%>. –

Cuestiones relacionadas