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

Posted

技术标签:

【中文标题】<%# Eval("State") %> 或 <%# DataBinder.Eval(Container.DataItem, "state")%>【英文标题】:<%# Eval("State") %> or <%# DataBinder.Eval(Container.DataItem, "state")%> 【发布时间】:2010-09-21 04:16:21 【问题描述】:

有什么区别

<%# Eval("State") %>

在您的 aspx 页面中,而不是拥有

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

在您的aspx 页面中?

【问题讨论】:

现在你有答案了……它是回声 2 次 :) 【参考方案1】:

&lt;%# Eval %&gt;&lt;%# DataBinder.Eval %&gt; 在幕后有很多不同之处,尽管 the documentation 声明使用 Eval(确切地说是 TemplateControl.Eval)实际上调用了 DataBinder.Eval 并且他们的任务是做完全相同的工作。

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

如果Page 管理的堆栈在您到达需要解析DataItem 的地步时不是最新的,则Page.GetDataItem() 方法将给出异常并显示类似的消息

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

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

【讨论】:

当出现以下错误时,例如“Eval()、XPath() 和 Bind() 等数据绑定方法只能在数据绑定控件的上下文中使用。”那么我们应该使用 而不是 .【参考方案2】:

我看过下面的代码

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

所以我猜它们略有不同。

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

Eval 方法只是后者的一个捷径

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于<%# Eval("State") %> 或 <%# DataBinder.Eval(Container.DataItem, "state")的主要内容,如果未能解决你的问题,请参考以下文章

self.eval_net.forward(state)和self.eval_net.forward(state)区别

Dash 和 C: eval "$(<cmdfile)" 和 system("eval \"\$(<cmdfile)\"") 给

<%# Eval("discountprice") %>的值保留一位小数

ASP.NET 中的 <%# Bind("") %> 和 <%# Eval("") %> 有啥区别?

项目模板中的 <%# DataBinder.Eval(Container.DataItem,"ColumnName") %> 究竟做了啥?

(0, eval)("this")