<%#Eval(“State”)%>或<%#DataBinder.Eval(Container.DataItem,“state”)%>

时间:2008-11-06 20:51:13

标签: asp.net data-binding eval

之间有什么区别
<%# Eval("State") %>

在您的aspx页面中,而不是

<%# DataBinder.Eval(Container.DataItem, "State") %>

在您的aspx页面中?

5 个答案:

答案 0 :(得分:39)

Eval(“State”)是DataBinder.Eval(Container.DataItem,“State”)语法的简化形式。它仅适用于数据绑定模板控件。

有关详细信息,请参阅the MSDN documentation

答案 1 :(得分:11)

没有区别。 “Eval”方法只是DataBinder.Eval(Container.DataItem,“blah”)方法的快捷方式。

答案 2 :(得分:9)

<%# Eval %><%# DataBinder.Eval %>之间存在很多差异,即使the documentation指出使用EvalTemplateControl.Eval确切)实际上调用DataBinder.Eval并且他们的任务是完成相同的工作。

这是正确的,但仅使用Eval意味着ASP.NET本身会解析数据绑定对象。它在内部使用堆栈执行此操作,其中在调用Control.DataBind()时添加项目。诀窍是,只有当控件的Page属性在那时不是null时才会发生这种情况。

如果Page - 托管堆栈在达到需要解析DataItem的时候不是最新的,Page.GetDataItem()方法会给出一条带有消息的异常像

  

Eval()XPath()Bind()等数据绑定方法只能在数据绑定控件的上下文中使用。

DataBinder.Eval在这些情况下仍然有效,因为您手动为其提供了目标对象,因此ASP.NET不需要自行解析。

答案 3 :(得分:4)

Eval方法只是字母的快捷方式

答案 4 :(得分:-5)

我见过以下代码

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

所以我猜他们略有不同。