我在formview中有我的自定义控件。此自定义控件具有多种属性,其中一个属性为Value
,我正在尝试数据绑定。
使用Container.DataItem
我可以对我的控件进行数据绑定,一切正常:
<fc:Literal runat="server" ID="readState" Label="State:" Value='<%# Container.DataItem("ActivityState") %>' />
然后当我尝试使用Eval
数据绑定时,它不会:
<fc:Literal runat="server" ID="readState" Label="State:" Value='<%# Eval("ActivityState") %>' />
给出错误:
数据绑定方法(如Eval(),XPath()和Bind())只能在数据绑定控件的上下文中使用。
Container.DataItem
所有内容都很好用,所以我的问题是:为什么Container.DataItem
有效,而Eval
没有?
答案 0 :(得分:2)
Eval只能与模板化控件一起使用。
Eval方法评估后期绑定 模板中的数据表达式 数据绑定控件,如 GridView,DetailsView和FormView 控制。在运行时,Eval 方法调用Eval(Object,String) DataBinder对象的方法, 引用当前的数据项 命名容器。命名 容器一般是最小的 数据绑定控件的一部分 包含整个记录,例如一行 在GridView控件中。您可以 因此仅使用Eval方法 绑定在模板中 数据绑定控制。
答案 1 :(得分:1)
您需要实现/扩展其中一个服务器控件以获取数据绑定表达式语法:
模板化数据绑定控制: 几篇文章: http://msdn.microsoft.com/en-us/library/aa478964.aspx http://msdn.microsoft.com/en-us/library/aa479322.aspx
CompositeDataboundControl:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.compositedataboundcontrol.aspx
DatBoundControl:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.databoundcontrol.aspx