ページで使用する場合、サーバー側の値から値をプロパティとして取得する必要がある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()
が必ずしも正しいことではないと私が信じていることを示すためにそれを含めました。
だから、質問:
- <%=%>が実行時に期待する値を提供しないのはなぜですか?
DataBind()
UserControlのOnLoad
イベントが実行時に私の値を取得するために正しいことを実行するたびに呼び出しています。そうである場合は、呼び出します。- 電話をかける前に確認すべき条件はありますか
DataBind()