2009-10-23 25 views
22

私はClientIDがjavascriptに使用され、UniqueIdがサーバー側で使用されていて、そのClientIDがアンダースコア(_)を使用し、UniqueIdがasp.net 2.0でドル記号($)を使用していることがわかります。しかし、私が得られないことは、なぜ2つの異なるidを使うかということです。アンダースコアを使用するか、サーバーとクライアント側の両方でドル記号を使用するだけの理由はありません。誰かがこれを説明できますか?C#asp.net ClientIDとUniqueIDの違いは何ですか?

答えて

12

さて、あなたはおそらく一意IDが変換後のHTMLタグのid属性とname属性とClientIdを一緒に使用されて知っています。 UniqueIDはセパレータとしてコロンを使用します。一方、ClientIdでは、JavaScriptの変数名にコロンが使用できないため、アンダースコアが区切り文字として使用されます。 ClientIDはUniqueIDと同じようにページ上でも一意ですが、ClientIDはクライアントサイドの処理をターゲットとし、UniqueIDはサーバー側(かなり明白です)、後者は複合コントロールを使用したポストバックデータやイベントをルーティングします。

ただし、私はいくつかの推論は、通常のコントロールIDの区切り記号としてアンダースコアを使用することはかなり一般的な動作であるため、区別することができなかったため、アンダースコアはUniqueIDでコントロール区切り記号として使用できないと考えています(理論的には、コントロール間。一方、同じ理由でコントロールIDにコロンを使用することはできません。ページフレームワークでは許可されません。したがって、コロンがClientIDに到達できないようにします(これはJavaScriptがそれを好まないためでした) 。

これらの理由から、FindControlメソッドはコントロールツリーをナビゲートしてコントロールを見つけるために(ユニークIDを簡単に分割できる)、コロンはUniqueIDで使用するのが良い選択です。

6

this.UniqueIDは、すべての命名コンテナに追加されたコントロールの名前です。 は、完全修飾されたコントロール名とみなされます。 this.ClientIDは の値で、コントロールのid属性に表示されます。これは の訳であり、uniqueidは(ほぼ)html準拠のidタグ( アンダースコアは実際にhtmlに準拠していません)です。 (上記の私の元の答えに加えて)

+0

したがって、先頭のアンダースコアは(実際には)htmlに準拠していません。なぜドル記号を使わないのですか? UniqueIdの代わりにサーバー側でClientIdを使用してみませんか?どちらも同じ意味で同じですが、唯一の違いはドル記号とアンダースコアの使用です。 – Martijn

+0

ClientIDの目的は、クライアント側のスクリプトで使用できるコントロールの一意の識別ID(UniqueIDに相当しますが、制御区切り記号としてアンダースコアを使用します)を返すことです。 – JamesM

+1

私はあなたが私のポイントを得ていないと思う:) Javascriptはドル記号が好きではないので、アンダースコアを使用します。それは今明らかです。だから私の次の質問は:なぜサーバー側でアンダースコアを使用しないでください?したがって、なぜサーバー上でClientIDを使用しないのですか?なぜドル記号を使用するアパートがあるのでしょうか?サーバーでアンダースコアを使用できないのはなぜですか? – Martijn

関連する問題