我有一個CustomControl,在頁面上使用時,需要從服務器端的值中獲取屬性值。我想這...我應該*真的*調用DataBind()嗎?
<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包含英寸
耶!有效。但是,當處理頁面上的某些事件時,對DataBind()
的調用會生成異常。異常在另一個控件中,它包含在與MyControl1
相同的UserControl容器中。
該消息是
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()
我不確定是否有最佳的解決方案,但afaik,'<%=...%>'類似於'Response.Write',這在你使用的上下文中是沒有意義的。 – Matthew
關於差異的博客文章:http://blogs.msdn。com/b/dancre/archive/2007/02/13/the-difference-between-lt-and-lt-in-asp-net.aspx – Matthew
謝謝你;我記得現在閱讀關於<%= %>的信息,我想這只是不粘! –