2013-01-24 64 views
1

我有一個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()不一定是正確的。

所以,問題:

  1. 爲什麼不<%=%>給在運行時我所期望的價值?
  2. 呼喚DataBind()
+1

我不確定是否有最佳的解決方案,但afaik,'<%=...%>'類似於'Response.Write',這在你使用的上下文中是沒有意義的。 – Matthew

+1

關於差異的博客文章:http://blogs.msdn。com/b/dancre/archive/2007/02/13/the-difference-between-lt-and-lt-in-asp-net.aspx – Matthew

+0

謝謝你;我記得現在閱讀關於<%= %>的信息,我想這只是不粘! –

回答

1
"`<%= this.ClientID %>`" 
之前調用 DataBind()每當用戶控件的 OnLoad事件觸發了正確的事情,讓我在運行時的值,如果是,
  • 是否有我應該檢查的條件

    在渲染時調用,ClientID尚未設置。

    "`<%# this.ClientID %>`" 
    

    在控件或頁面DataBind()中被調用。 如果你打算使用這最後一個,那麼你應該確實調用DataBind()並修復你的異常。

  • +0

    你的兩個例子是相同的。你不是說第二個是「<%#this.ClientID%>」嗎? –

    +0

    是的,我在第二個例子中犯了一個錯誤。謝謝 –

    +1

    出於某種原因,如果我在調用'OnLoad()'的''''''DataBind()'時調用'throw'異常,但是如果我只在'!IsPostBack'時執行它,一切正常。我並沒有聲稱明白爲什麼,但我認爲這是另一個地方的主題。 –