<%# 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】:<%# Eval %>
和 <%# DataBinder.Eval %>
在幕后有很多不同之处,尽管 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") %> 究竟做了啥?