ClientIdMode に関する MSDN ドキュメントの状態:
静的 ClientID 値は、ID プロパティの値に設定されます。コントロールが名前付けコンテナーである場合、そのコントロールは、それに含まれるすべてのコントロールの名前付けコンテナーの階層の最上位として使用されます。
ソース: http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode%28v=vs.100%29.aspx
しかし、私は「階層のトップ」ビジネスが当てはまるとは思いません。たとえば、私はユーザーコントロールを持っています:
<uc1:WidgetsListControl runat="server" id="WidgetsListControl" ClientIDMode="Static" />
適切な測定のために、コントロール ソースにも clientidmode を設定しましたが、どちらが必要かはわかりません。
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WidgetsListControl.ascx.cs" Inherits="WebApplication1.WidgetsListControl" EnableViewState="false" ClientIDMode="Static" %>
ユーザー コントロール内に、テキスト ボックスがあります。
<asp:TextBox ID="testTextBox" runat="server" />
私の期待は、テキストボックスの名前が次のようになることですWidgetsListControl$testTextBox
ただし、ソースを表示すると次のようになります。
<input name="ctl00$MainContent$WidgetsListControl$testTextBox" id="testTextBox" type="text"/>
私は何が欠けていますか?ユーザーコントロール内のすべてのコントロールに「静的」を設定せずに、探しているもの(短いID)を達成する方法はありますか?
編集:
実際に詳しく調べてみると、ID 属性は MSDN で説明されているとおりに機能していることがわかりましたが、name 属性は依然として名前付けコンテナー階層の完全な連結です。
非常に複雑なサイトでは、これらのコントロールの名前と ID が帯域幅 (マークアップ サイズ) の大部分を占め始めます。この点に関して、マークアップをスリム化するための適切な回避策が見つからないようです。