ユーザー コントロールの AjaxToolkit SliderExtender のトラブルシューティング
AjaxToolkit SliderExtender をユーザー コントロールに追加すると、「コントロールにコード ブロックが含まれているため、Controls コレクションを変更できません。」というエラーが発生する場合があります。これは通常、ユーザー コントロールのマークアップ内にサーバー側のコード ブロックが存在する場合に発生します。
解決策:
この解決策には、サーバー側コードのリファクタリングが含まれます。 Response.Write
コード ブロックを使用する代わりに、データ バインディング式を実装します。 たとえば、Response.Write()
コードを同等のデータ バインディングに置き換えます。 これにより、コントロールのライフサイクル中にコードがサーバー側のコードとして解釈されることがなくなり、Controls
コレクションの変更が可能になります。
これは簡略化された図です: (注: オリジナルで提供されている <head>
タグの例は不完全であり、コンテキストが不足しています。より適切な例では、ユーザー コントロールのマークアップ内の Response.Write
ステートメントが示されています。)
ユーザー コントロールの Response.Write
ファイル内に次のような .ascx
ステートメントがあるとします。
<code class="language-C#"><% Response.Write(someVariable); %></code>
データ バインディング式に置き換えます:
<code class="language-asp.net"><%= someVariable %></code>
最後に、マスター ページの分離コード ファイル (.aspx.cs
) に次のコードを追加します。
<code class="language-C#">protected void Page_Load(object sender, EventArgs e) { Page.Header.DataBind(); }</code>
この DataBind()
呼び出しにより、Controls
コレクションが変更される前にデータ バインディング式が適切に評価されることが保証され、それによってエラーが解決され、SliderExtender を正常に追加できるようになります。
以上がAjaxToolkit SliderExtender をユーザー コントロールに追加できないのはなぜですか?また、「コントロール コレクションを変更できません」エラーを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。