我有我的自定义控件一个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的(),并绑定()只能在数据绑定控件的上下文中使用。
一切都与workds很大Container.DataItem
,所以我的问题是:为什么Container.DataItem
工作, Eval
不?
EVAL只能用模板控制使用。
Eval方法评估在FormView的控制数据绑定控件如GridView,DetailsView和的模板后期绑定数据表达式。 在运行时,Eval方法调用DataBinder的对象的的eval(对象,String)方法,它引用了命名容器的当前数据项。 命名容器通常是包含一个整体的记录,如在GridView控制一个行中的数据绑定控件的最小部分。 因此,您可以使用Eval方法仅用于绑定数据绑定控件的模板内。
您需要实现/延长下面让数据绑定表达式语法的服务器控件之一:
模板化数据绑定控件:文章夫妇: 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