WebサーバーとWebクライアントはリクエストとレスポンスをやり取りして処理を進めていきます。これらはいつもつながっているわけではないので、リクエストがあったらサーバーは処理をする準備をして処理をし、結果を返したら後片付けをします。またリクエストがあったら準備をして…を繰り返していきます。
Webアプリケーションでは、データを複数のやり取りで利用したい場合があります。上のような仕組みでは、毎回毎回データを用意しなくてはなりません。一度使ったデータはレスポンスがされたら消えてしまいます。
何度かのやり取りでデータを扱いたい場合は、データを保存させなければなりません。その方法にはいくつかあります。この節ではそのうちの一つであるビューステートを使った方法を見てみましょう。ビューステートはWebブラウザーにデータを保存させます。Htmlの隠し要素としてデータを保持させ、画面上にはデータを表示しません。
Webサーバーは保存したいデータをレスポンスに載せてWebブラウザーに送り、保存させます。Webブラウザーからリクエストがあった時に一緒に保存させておいたデータを送ってもらいます。
ビューステートはStateBagオブジェクトを使って扱います。PageオブジェクトのViewStateプロパティでStateBagオブジェクトを取得できます。
プロパティ名 | 概要 |
---|---|
Item | StateBagオブジェクト内の項目の値を取得・設定する |
プロパティ名 | 概要 |
---|---|
Add |
StateItemオブジェクトをStateBagオブジェクトに追加する 既に項目が存在する場合は、値を更新する |
Clear | StateBag内の項目をすべて削除する |
Remove | StateBagオブジェクトから指定したキーと値のペアを削除する |
プロジェクトの種類 | ASP.NET Webアプリケーション |
---|---|
プロジェクト名 | ViewStateTest |
○ デザイン
Webフォームを追加して、次のようにコントロールを配置してください。
○ プログラム
次のように各イベントハンドラにプログラムを記述してください。
index.aspx.vb
○ 実行結果
index.aspxを実行してください。
○ 解説
15行目ではViewStateプロパティにキー名colorで、txtColorに入力した文字列を格納しています。これによりWebブラウザー側に入力した文字列が保存されるようになります。22行目では、ビューステートの情報を取得して、その色をtxtColorの背景色としてセットしています。System.Draw.Color構造体のFromNameメソッドは、引数に指定した色名のColorオブジェクトを生成できます。今回は結果としてtxtColorに入力した色名を背景色として表示させています。
ビューステートは多用しすぎるとWebサーバー・Webクライアント間でのやり取りする情報が多くなり、レスポンスが遅くなる可能性があるので注意が必要です。