カスタム Web コントロールを作っています。
以前作った、連続クリック防止ボタンを拡張しています。
以前のは Button なら Button だけ、LinkButton なら LinkButton だけを disabled にしていたので、
今度は画面に登録されている Button, LinkButton, ImageButton 全てが連動するようにしている。
修正するところは大したところじゃなくて、利用している JavaScript を共通的なものにして、ClientScriptManager のように管理するクラスを作ってやるだけ。
で、AddAttributesToRender をオーバーライドして onclick や href の実行スクリプトをスクリプト管理クラスから取得しているんだけど、ここで問題が起きた。
ちゃんと動きはするんです。
ただ、デザイナでコントロールが正しく表示されない。
ただの文字列だけになる。
仕方ないのでデザイナクラスを作ってみた。
するとページに直接登録したときは、正しく表示された。
一安心、と思っていたらまたしても問題が起きた
DataGrid のようなコンテナ内に配置すると、コンテナもろともエラーで表示されなくなる。
これは、カスタムコントロール側では制御できないだろう。
解析するのはコンテナの方だしなぁ。
どうも、internal なスクリプト管理クラスの internal なメソッドから onclick のスクリプトを取得している部分がまずいらしい。
これを protected なメソッドにして、コントロールのクラス内部に配置したら問題なく表示された。
そんなわけで全く同じメソッドを三つのクラスに配置した。
こんなことやりたくないのに・・・・
とりあえず、まだ v1.0 の環境でしか確認できてないので、v1.1, v2.0 に移植して試してみないといけない。
しかし、なんでこんなことになるのかがさっぱりわからん、RenderControl の結果をレンダリングしてるだけじゃないのか??