1

ページで使用する場合、サーバー側の値から値をプロパティとして取得する必要がある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から継承していると仮定します)。

そこで、 CustomControlが含まれているUserControlDataBind()のイベントへの呼び出しを追加しました。OnLoad

わーい!機能した。ただし、ページ上の特定のイベントを処理する場合、toを呼び出すと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()が必ずしも正しいことではないと私が信じていることを示すためにそれを含めました。

だから、質問:

  1. <%=%>が実行時に期待する値を提供しないのはなぜですか?
  2. DataBind()UserControlのOnLoadイベントが実行時に私の値を取得するために正しいことを実行するたびに呼び出しています。そうである場合は、呼び出します。
  3. 電話をかける前に確認すべき条件はありますかDataBind()
4

1 に答える 1

1
"`<%= this.ClientID %>`"  

レンダリング時に呼び出され、ClientIDその時点では設定されていません。

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

コントロールまたはページ中に呼び出されますDataBind()。この最後のものを使用する場合は、実際に呼び出しDataBind()て例外を修正する必要があります。

于 2013-01-24T23:43:02.237 に答える