2005.09.07

VB.NETのWebアプリケーションでChangedイベントが取得できない

VB.NETのWebアプリケーション開発で
ボタンクリックイベントや
テキストチェンジイベントが
取得できない場合には
まず"Handles"が記述されているかを確認します。

コントロールをHTMLで編集すると
"Handles"が消えてしまったり
"Webフォームデザイナで生成されたコード"に
きちんとデータが反映されて
いなかったりする場合があります。

また他にも原因が考えられます。
例えばチェックボックス(AutoPostBack=True)で
"CheckedChanged"のイベントを取得している場合に

 ①初期状態でチェックが入っていない
 
 ②JavaScriptでチェックを入れる
 
 ③チェックボックスをクリックしてチェックを外す
 
という処理を行うと"CheckedChanged"の
イベントは取得できません。

これはクライアント側ではチェックボックスの
中身を変更しているのですが
サーバ側ではチェックが入っていないままと
認識されるためと思われます。

この問題を回避するためには
サーバ側、またはクライアント側だけで
処理を行う必要があります。

参考までにVB.NETで
チェックボックスをチェックした場合にリストボックスを選択し、
チェックを外した場合にリストボックスの選択を全て外すという
処理を行うコードの一部を例として2つ記述しておきます。

○サーバ側で処理を行う場合

Dim b As Boolean = Me.[チェックボックス名].Checked
For i As Integer = 0 To Me.[リストボックス名].Items.Count - 1
Me.[リストボックス名].Items(i).Selected = b
Next

○クライアント側で処理を行う場合

Dim script As String

script = "var b;if(document.Form1.all
 ['チェックボックス名'].checked==true)
 b=true;else b=false;
  for(var i=0;i<" & Me.[リストボックス名].Items.Count
  & ";i++) { document.Form1.all['リストボックス名']
  [i].selected=b; }"

Me.[チェックボックス名].Attributes("onClick") = script

もっといい書き方もあると思いますが
とりあえず同じような処理をしてくれます。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
admin