(オート)ポストバックについてお風呂の中で色々考えてみた
はじめに
ポストバックについて詳しく知りたい方は、ぐぐって下さい。
私自身も、深く理解しているわけではないですが思うことがあるので以下に書きます。
あと、以下では、VB.NET、ASP.NETについてです。
何の為にポストバックがあるのか?
まず、何の為にポストバックがあるのか。
画面と処理のコーディングが1:1に対応する事が主な目的かと思いますし、そう習った記憶があります。
AutoPostBackが嫌いだ!
そして、ASP.NETにはAutoPostBackというのがあり、テキストボックスの値が変わった時(正確にはフォーカスを失う時)や、ドロップダウンリストの値が変わったとき、チェックボックスにチェックが付けられた(または、外された)時に、毎回ポストバックするように設定出来ます。つまり、データをポストする!これが、AutoPostBackというそれぞれのASP.NET独自のタグのプロパティーをONにするとこのような処理が走る訳です。
こいつが便利そうに見えて厄介。
極端な話、以下のような事が発生。
- 数字しか入れて欲しくないテキストボックスがあります。
- そいつに、適当に文字を入れます。
- フォーカスを外します
- PostBack発生
- つまり、データをPOSTする(データ全部!!ページが大きくなったら大変だよ!)
- テキストボックスの中身を検査するプログラムが走る
- 数字じゃない文字がある!エラーだ!
- エラーは、元のページに戻すプログラムを書く(元のページから、元のページへページ遷移)
- 元のページでエラーを表示
こんな事や、これに似たようなことがしょっちゅうあります。
それ、JavaScriptとかAjaxで出来るのでは?
と、思うわけです。テキストボックスの値なんてJavaScriptで警告出せるのでは無いでしょうか?JavaScriptの知識が乏しいのではっきりとは言えませんが。
また、あるコードを元に、そのコードに対応する名前を持ってくるのもAjaxを使えば画面がチカチカせずに再現出来そうなものですがどうなんでしょう。
まとめ
こう考えると、PostBackの意味はまだしも、AutoPostBackの存在意味が良く分からない状態です。今度詳しい人に、聞くなり、教わるなりしたい所です。
最後に
asp.net2.0では、別ページにポストバック出来るようです。こうなると、バックじゃないような・・・(参考:http://www.microsoft.com/japan/msdn/asp.net/tips/Postback/