第2回 ASP.NETの基礎 サーバ・コントロール編:連載 プログラミングASP.NET ―ASP.NETによるWebアプリケーション実践開発講座― (3/3 ページ)
ASP.NETアーキテクチャの中核となるサーバ・コントロール。ASP.NETでは、さまざまなHTMLコントロールをサーバ側で制御可能となった。
サーバ・コントロールの自動状態管理
リスト2.2にはプログラム・コードが含まれていないので、実行しても何も起こりはしない。しかしボタンをクリックしてフォームのデータを送信しても、テキスト・ボックスやリスト・ボックスの内容が維持されていることが確認できる。そんなことは当たり前だと思われるかもしれないが、相応の処理を行わなければ、こうはならないのがWebアプリケーションの世界だ。
以前にこんな経験をしたことはないだろうか。あるWebページのフォームに情報を入力し、Submitしてみると、どうやら入力漏れがあったらしく、「必要な項目が入力されていません」と表示されてしまった。そこで仕方なくページ上の戻るボタンをクリックすると、せっかく入力したはずのフォームがすべて空欄になっていて、また一から入力し直すはめになった。さすがに最近はこんなWebページにお目にかかることは少なくなったが、数年前までは少なからず遭遇したものだ。
このようにフォームに入力した情報が失われてしまうのは、HTTPがステートレスなプロトコルとして設計されているためだ。フォームをポストする前のWebページと、ポストした後のWebページは見た目は同じでも、それぞれ個別にWebサーバによって生成された異なるインスタンスであり、両者に関連はないということだ。従って、ポストする前にフォームに入力されていたデータは、通常ならばポストと同時に失われてしまう。そこで、ポスト後もフォームの状態を維持したければ、ポストバックされたデータ(ポストによりクライアントから送信されたデータ)を受信したWebアプリケーションが、inputタグのvalue属性にポスト前に入力されていたテキストを設定したり、optionタグにselected属性を追加したりして、適切にフォームの値を設定しなければならないのである。
ところがASP.NETページでは、特別なコードを追加することなく、フォームの復元が実現されている。これはASP.NETの「自動状態管理」と呼ばれる機能によって、ポストバックされたコントロールの状態が保存され、自動的に復元されているからだ。従って、ASP.NETページではコントロールの値を明示的に復元する必要はない。
なおASP.NETでは、ランタイム時に修正されたサーバ・コントロールのプロパティを維持するための、ビュー・ステートと呼ばれる仕組みも提供されている。ビュー・ステートに保存されたデータは、リスト2.3にも見られるように、次のような隠しフォーム・フィールドを使って、サーバとのラウンド・トリップを超えて受け渡しが行われる。これによって、動的に設定されたサーバ・コントロールのプロパティや、通常ならばポストバックされない、例えばサーバ・コントロールの背景色などの情報も受け継ぐことができる。
<input type="hidden" name="__VIEWSTATE" value="dDwtMjQ2NzY2NTg4Ozs+ZAb/9Yu17HXHz2eFLnnEBpPo6hs=" />
なおビュー・ステートは、コントロールの状態が自動的に保存される以外に、Webアプリケーションの状態を保存するために、プログラムから明示的に利用することも可能だ。ビュー・ステートの詳細については、またあらためて解説する予定である。
次回は今回の内容に引き続き、「ASP.NETの基礎 イベント編」と題して、今回作成したサンプル・プログラムにイベント処理を追加してみる。
Copyright© Digital Advantage Corp. All Rights Reserved.