【ASP.NET】javascriptから見たidについて

今回は、ASP.NETネタです。
クライアントサイドでJavaScriptを使用して操作を行う場合、ASP.NETで設定されるidで迷う場合があります。

場合があると言うのは、シンプルなaspxページの場合は、タグに付けたidがそのまま使用されます。
なので、JavaScriptで記述するさいもidをそのまま記述できます。

ところが、複雑というかマスターページを使用s田場合や、GridViewとかMultiViewのように配下にコントロールを持つようなコントロールを使用した場合には、そのままタグに付けたidを記述するとができません。
と言うのは、親のコントロールidをプレフィックスした形式でidが書き換えられています。
具体的には、マスターページを使用した場合はマスターページにContentPlaceHolderが使用されています。デフォルトの IDは「ContentPlaceHolder1」となっていますので、その中にdivタグを追加して、idを「div1」とした場合は、javascriptに記述するidは「ContentPlaceHolder1_Div1」となります。

これはasp.netが独自に創生したコントロールと人が作成したコントロールのidが重複しないようにするためにされていることなので、
単純に配下に作られたコントロールのidに親のidを頭に付加して重複を避けようと工夫された産物です。

以前はそうなんだと納得し、記述する際に面倒だなぁ。。。デバッグでイベントが発生しないと、あぁあれか。。。となっていました。
しかし、ASP.NET 4 からはどうやら更に工夫がされたようです。
それは、ClientIDModeと呼ばれるプロパティが追加されていました。

ClientIDModeは、idを生成するルールを選択するプロパティが設定できます。

設定値 ルール
AutoID 今まで通り。自動でidが生成される
Static 手で設定したidがそのまま使用される。重複しないように開発者が注意
Predictable ClientIDRowSuffixプロパティ値を参照して生成される

使うとしたら、Staticでしょうか。
Predictableは余計に面倒になるだけのような。大規模開発の場合は予めわかっていた方が便利なのかな?それでもid命名規約を作ればいいことだし。。。

いろいろ有りますが、idの重複をしないようにするための工夫なので、その点を意識して開発すれば問題無いと思います。

以上、ASP.NETネタでした。