asp.net 2.0では、ClientIDがjavascriptに使用され、UniqueIdがサーバー側に使用され、ClientIDがアンダースコア(_)を使用し、UniqueIdがドル記号($)を使用することを知っています。しかし、私が得られないのは、なぜ2つの異なるIDを使用するのかということです。サーバー側とクライアント側の両方で、アンダースコアを使用したり、ドル記号を使用したりすることができないのはなぜですか。誰かがこれを説明できますか?
2 に答える
(上記の私の元の答えに加えて)
ご存知かもしれませんが、UniqueIDはname属性で使用され、ClientIdはレンダリングされたHTMLタグのid属性で使用されます。UniqueIDは、区切り文字としてコロンを使用します。一方、JavaScript変数名ではコロンが許可されていないため、ClientIdは区切り文字としてアンダースコアを使用します。ClientIDは、UniqueIDと同様にページ上でも一意ですが、ClientIDはクライアント側の処理を対象とし、UniqueIDはサーバー側を対象としています(非常に明白です)。後者は、特に複合コントロールを使用してポストバックデータとイベントをルーティングします。
ただし、通常のコントロールIDでアンダースコアを区切り文字として使用することはかなり一般的な動作であるため、UniqueIDでアンダースコアをコントロール区切り文字として使用することはできません(理論的には1つのプロパティで管理することを考えている場合)。コントロール間の区別。一方、同じ理由で、コントロールIDでコロンを使用することはできません。PageFrameworkはコロンを許可しないため、コロンがClientIDに到達できないようにします(これはJavaScriptがそれを好まないためです) 。
これらの理由から、コロンは、FindControlメソッドがコントロールツリーをナビゲートしてコントロールを見つけるために使用できるため、UniqueIDで使用するのに非常に適しています(UniqueIDを簡単に分割できます)。
this.UniqueIDは、すべての名前付けコンテナーに追加されたコントロールの名前です。完全修飾されたコントロール名と考えてください。this.ClientIDは、コントロールのid属性に表示される値であり、uniqueidを(ほぼ)html準拠のidタグに変換したものです(先頭の下線は実際にはhtml準拠ではありません)。