ASP.NETを介してレンダリングされたマークアップの要素に対して「name」属性がどのように機能するかを理解しようとしています
つまり<select id="lblxyz" name="ctl00$c$ctl341$lblxyz">
ctl00
とは何 c
ですかctl1341
?
を作成しWebControl
、それに任意のIDを指定してから、Button
そのControls
コレクション内に配置すると、name
属性はコンテナーのIDを反映していないように見えますか?
ASP.NETを介してレンダリングされたマークアップの要素に対して「name」属性がどのように機能するかを理解しようとしています
つまり<select id="lblxyz" name="ctl00$c$ctl341$lblxyz">
ctl00
とは何 c
ですかctl1341
?
を作成しWebControl
、それに任意のIDを指定してから、Button
そのControls
コレクション内に配置すると、name
属性はコンテナーのIDを反映していないように見えますか?
あなたが発見した重要なことは、すべてのコントロールがこの動作をトリガーするわけではないということです。重要なのはINamingContainerインターフェースです。これまで見てきたように、ネーミングコンテナのみがコントロールの名前に影響しますが、他のコントロールは影響しません。
上にリンクされているMSDNページは、それを非常によく示しています。そのインターフェイスは、「Pageオブジェクトのコントロール階層内に新しいID名前空間を作成するコンテナコントロールを識別します」。
生成されるname属性は通常、常にで始まりctl00
、残りはコントロールがコントロール階層のどこにあるかに基づいて生成されます。インターフェイスを実装する親コントロールはINamingContainer
、子コントロール用に生成された名前に影響します。
これはあなたにとって興味深いかもしれません、それは生成されるID /名前を概説します:http ://www.mostlylucid.net/archive/2008/11/03/way-too-much-information-on-control-ids-および-asp.net-4.0.aspx
新しいClientIDModeを使用して、クライアントIDの表示方法を制御できます。