我有一个 CustomControl,当在页面上使用时,它需要将来自服务器端值的值作为属性。我试过这个...
<MyControl runat="server"
ID="MyControl1"
ContainerId="<%= this.ClientID %>" />
现在,当运行时(为了解释起见,假设我知道它的值this.ClientID
是“ctl00_MyControl1”),如果我在客户端测试它的值ContainerId
返回为“<%= this.ClientID %>” .
在没有真正理解原因的情况下,我尝试了这个......
<MyControl runat="server"
ID="MyControl1"
ContainerId="<%# this.ClientID %>" />
但测试 的值ContainerId
显示该值为空!
更多阅读使我看到 <%# %> 机制是用于数据绑定的,但很明显,我的控件没有这样做(假设我的 CustomControl 继承自 TextBox)。
因此,我添加了对DataBind()
包含OnLoad
我的 CustomControl 的 UserControl 事件的调用。
耶!有效。但是,在处理 Page 上的某些事件时,对 的调用会DataBind()
产生异常。异常发生在另一个控件中,该控件包含在与 相同的 UserControl 容器中MyControl1
。
消息是
Selection out of range
Parameter name: value
堆栈跟踪像这样完成......
at Telerik.Web.UI.RadComboBox.PerformDataBinding(IEnumerable dataSource)
at Telerik.Web.UI.RadComboBox.OnDataSourceViewSelectCallback(IEnumerable data)
at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
at Telerik.Web.UI.RadComboBox.OnDataBinding(EventArgs e)
at Telerik.Web.UI.RadComboBox.PerformSelect()
at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
at Telerik.Web.UI.RadComboBox.DataBind()
at System.Web.UI.Control.DataBindChildren()
at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding)
at System.Web.UI.Control.DataBind()
现在,我不是在寻找解决此异常的方法。我把它包括在内是为了证明我相信我的呼召DataBind()
不一定是正确的事情。
所以,问题:
- 为什么 <%= %> 在运行时没有给出我期望的值?
DataBind()
每当 UserControl 的OnLoad
事件触发正确的事情以在运行时获取我的值时调用,如果是,- 在打电话之前我应该检查哪些条件
DataBind()