0

以下のように、ページ (.aspx) に埋め込んでいるユーザー コントロール (.ascx) があります。

<%@ Register TagName="UI" TagPrefix="my" Src="~/userControls/UI.ascx" %> 
<my:UI runat="server" ID="mytestui" />

ページが読み込まれると、ユーザー コントロール内のコントロール (テキスト ボックス、ドロップダウンなど) が自動的に変更されます。txtTest というテキスト ボックスがあるとします。これは mytestui_txtTest に変更されます。

ご覧のとおり、上記のユーザー コントロールの ID を受け取り、それをコントロールに追加します。

これを防ぐ方法はありますか?

4

2 に答える 2

2

これは、コントロールがインターフェイスUserControlを実装するクラスのサブクラスであるために発生しINamingContainerます。デフォルトでは、このインターフェイスを実装するすべてのコントロールは、子の ID の先頭に独自の ID を追加するため、ページ上のすべての ID が一意になります。

この動作を回避するには、次の 2 つのオプションがあります。

  1. UserControlクラスからではなくControlクラスから直接継承して、サーバー コントロールを作成します。これは実装していませんINamingContainer。ただし、マークアップ ファイルがないため、すべてのコントロールをプログラムで生成する必要があります。

  2. [編集: ASP.NET 4 のみ]ClientIDMode="Static"子コントロールに使用します。このモードでは、コントロールのサーバー ID とクライアント ID が完全に一致することが保証されます。この場合、ID の重複を避けるために、このコントロールがページ上で 1 回だけ使用されるようにするのは開発者の仕事です。

于 2013-06-26T08:44:11.050 に答える