前回で、UpdatePanelの非同期ポストバックでも実は普通に他の部分のイベントが起きてたり、UpdatePanelに置かれてないコントロールにたいしてもプロパティの書き換えが裏でやられてることがわかった。
その2のコメントにもあるように、~Changed系のイベントでも同じようなことが起きる。
実際に動く例をつくってみた。
背景の青い部分がUpdatePanelで囲まれた部分になる。
上側のTextFieldがTextField1で下側がTextField2になる。
各々のTextFieldのTextChangedイベントに下のようなコードを書いてみた。
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
Label1.Text += "てきすとぼっくす1";
}
protected void TextBox2_TextChanged(object sender, EventArgs e)
{
Label1.Text += "てきすとぼっくす2";
}
この状態でぼたん1をクリックするとどうなるか?
ページ全体がポストバックされ、TextField1とTextField2が変更されてると各々のChangedイベントが走る。
ここらへん、知らないと微妙な動きをするアプリケーションを作ってしまいそうなので要注意。
さて、本当にUpdatePanel外のTextFieldのTextChangedが動いてるか見てみよう。
実行して
テキストフィールドに値を入力して
ボタンを押す
見てのとおり、テキストボックス2のTextChangedイベントもばっちり動いてる。
ここでは、UpdatePanel内のコンポーネントに値を書き出してたから書き換えた結果が画面に反映されてたけど、UpdatePanel外のラベルとかに値を出力してるとカオスなことになる。
要注意じゃ!