0

私は次のselect要素を理解しようとしています:

   <select name="ctl00$ctl00$ContentPlaceHolder1$ContentItems$ddlResponseRange id="ctl00_ctl00_ContentPlaceHolder1_ContentItems_ddlResponseRange" class="Content" style="width:11%;">

これはすべて自動的に生成されたコードです。正しい (つまり ct100 のように) ? $ 記号は何をしているのですか? 式のバインディング用ですか? 参考までに、ここでの ddl は「ドロップダウン リスト」を意味します。

4

2 に答える 2

1

$およびは、コントロールのサーバー側IDと、タイプの親コントロール(通常はコントロール)_のサーバー側IDの間の区切り文字として使用されます。ddlResponseRangeINamingContainer<asp:content>

ページ内のコントロール自体には、<form runat="server">そのような属性はありません。ただし、マスターページまたはデータバインディングコントロールの使用を開始すると、を実装するコントロールを使用することになりますINamingContainer。このインターフェイスはマーカーのようなものであり、ASP.NETランタイムに、コントロールのサーバー側IDを子コントロールのサーバー側IDに追加し始めるように指示します。これは、生成されたHTMLで一意の名前とID属性を保証するために必要です。

最終的に、このインフラストラクチャは、ASP.NETWebフォームのポストバックメカニズムとクライアント側のスクリプトをサポートするものです。

ASP.NET 4.0以降を使用している場合は、ASP.NETによるクライアント側IDの生成方法に実際に影響を与えることができます。クライアント側IDを構成するさまざまな方法については、この記事を参照してください。

于 2012-12-17T20:40:07.747 に答える
1

それはすべて、1 つの大きな文字列にすぎません。HTML の観点からは、それらはすべて属性の値を構成する有効な文字であるため、その意味では「正しい」と言えます。

自分で id/name 値を使用しようとしたり、その構造に基づいて name/id に関する仮定に頼ったりすることについては、それを避けることをお勧めします。実際には、その項目からルートまでのすべての要素の ID にすぎないという事実にもかかわらず、ASP が私が使用できないランダムな名前/ID を生成するふりをする方が望ましいと思います。そのような ID 値を自分で書き込んでいることに気付いた場合は、おそらく何か間違ったことをしている可能性があります。

実際にランダムなID /名前を割り当てる(またはまったく割り当てない)のではなく、その規則に従う理由は、HTML応答をメモリ内のアイテムの構造に関連付けるために再利用できるようにするためです。ID がページごとに一意であることを確認することも重要です。この構造を使用することで、APS ID 値は兄弟要素間でのみ一意である必要があることを意味します。

于 2012-12-17T20:12:41.957 に答える