4

ページ コントロール ID を確認すると、ContentPlaceHolder1_lnkDistributorsのようになります。

しかし、ライブサーバーでサイトをホストした後、プレフィックスが上記の ID に追加されています。

のように: ctl00_ContentPlaceHolder1_lnkDistributors

<asp:LinkButton ID="lnkDistributors" runat="server" Text="Distributors">
</asp:LinkButton>

私を助けてください。前もって感謝します。

4

3 に答える 3

10

Static ClientIDModeIDは、HTML で制御することを目的としています。ただし、慎重に使用する必要があります。ページ内のコントロール ID の一意性は保証されません。

<asp:LinkButton ID="lnkDistributors" ClientIDMode="Static"  
 runat="server" Text="Distributors">  </asp:LinkButton>

コントロールの ClientIDMode が に設定されている場合AutoID、コントロールの ID には一意にするためのプレフィックスが付きます。(例: ID が「sam」のコントロールは「ct100_sam」になります)。コントロールの ClientIDMode が に設定されている場合Static、ID は変更されず、開発者が設定したもののままになります。


MSDN

ASP.NET には、ClientID プロパティ値を生成するための複数のアルゴリズムが用意されています。ClientIDMode プロパティを設定して、コントロールに使用するアルゴリズムを選択します。アルゴリズムは、次の一覧に記載されている ClientIDMode 列挙値によって識別されます。

AutoID

ClientID 値は、各親名前付けコンテナーの ID 値をコントロールの ID 値と連結することによって生成されます。コントロールの複数のインスタンスがレンダリングされるデータ バインディングのシナリオでは、増分値がコントロールの ID 値の前に挿入されます。各セグメントはアンダースコア文字 (_) で区切られます。このアルゴリズムは、ASP.NET 4 より前のバージョンの ASP.NET で使用されていました。

静的

ClientID 値は、ID プロパティの値に設定されます。コントロールが名前付けコンテナーである場合、そのコントロールは、それに含まれるすべてのコントロールの名前付けコンテナーの階層の最上位として使用されます。

予測可能な

このアルゴリズムは、データ バインド コントロール内のコントロールに使用されます。ClientID 値は、親ネーミング コンテナーの ClientID 値をコントロールの ID 値と連結することによって生成されます。コントロールが複数の行を生成するデータ バインド コントロールの場合、ClientIDRowSuffix プロパティで指定されたデータ フィールドの値が最後に追加されます。GridView コントロールの場合、複数のデータ フィールドを指定できます。ClientIDRowSuffix プロパティが空白の場合、データ フィールド値の代わりに連番が末尾に追加されます。この数値はゼロから始まり、行ごとに 1 ずつ増加します。各セグメントはアンダースコア文字 (_) で区切られます。

継承する

コントロールは、その NamingContainer コントロールの ClientIDMode 設定を継承します。ページの ClientIDMode のデフォルト値は Predictable です。コントロールの ClientIDMode のデフォルト値は Inherit です。コントロールのデフォルトは継承であるため、デフォルトの生成モードは予測可能です。(ただし、Visual Studio を使用して Web プロジェクトを以前のバージョンから ASP.NET 4 に変換すると、Visual Studio は Web.config ファイルでサイトの既定値を AutoID に自動的に設定します)。

于 2013-09-17T10:07:11.823 に答える
1

ClientIDMode="Static"マスターページに追加しました。

<%@ Master  ClientIDMode="Static"....

ここで ID は次のようになります: ContentPlaceHolder1_lnkDistributorsや ctl00_ContentPlaceHolder1_lnkDistributors とは異なり、lnkDistributors のみ。

今は正常に動作しています。

于 2013-09-17T10:06:48.377 に答える
1

Idページまたはアプリケーション レベルで、ASP.NET アプリケーションの自動インクリメントを無効にすることができます。ClientIDMode="Static"ページ レベルの場合は、@masterディレクティブに を追加します。アプリケーション レベルの場合は、 に追加ClientIDMode="Static"web.configます。

于 2020-06-03T09:44:00.067 に答える