第2回 ASP.NETの基礎 サーバ・コントロール編連載 プログラミングASP.NET ―ASP.NETによるWebアプリケーション実践開発講座― (3/3 ページ)

» 2002年05月29日 00時00分 公開
[田口景介]
前のページへ 1|2|3       

サーバ・コントロールの自動状態管理

 リスト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の基礎 イベント編」と題して、今回作成したサンプル・プログラムにイベント処理を追加してみる。

「連載 プログラミングASP.NET ― ASP.NETによるWebアプリケーション実践開発講座 ― 」のインデックス

連載 プログラミングASP.NET ― ASP.NETによるWebアプリケーション実践開発講座 ― 

前のページへ 1|2|3       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。