今回は、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ネタでした。