HttpContextオブジェクトによるページ遷移

 HttpContextクラスを利用するとデータをオブジェクトに包み込んでサーバー内でデータを送信します。PageオブジェクトのContextプロパティでHttpContextオブジェクトを取得できます。

■ 主なプロパティ

プロパティ名 概要
Request 要求されたWebページに対するHttpRequestオブジェクトを取得する
Response 要求されたWebページに対するHttpResponseオブジェクトを取得する
Server HttpServerUtilityオブジェクトを取得する
HttpContextの主なプロパティ

 このHttpContextクラスにはいろいろなオブジェクトが入っています。その中のHttpServerUtillityオブジェクト(Serverプロパティ)が持つTransferメソッドで遷移することができます。

プロジェクトの種類 ASP.NET Webアプリケーション
プロジェクト名 HttpContextTest

サンプルダウンロード

○ 作成の準備

 「HttpResponseTest」プロジェクトを修正して作成しましょう。HttpResponseTestフォルダーをコピーして、作成するプロジェクト名にフォルダー名を変更してください。

○ デザイン(index.aspx)

 Webフォーム内の見出しをRedirect → Transferに変更してください。

コントロールの配置例
コントロールの配置例

○ プログラム(index.aspx.cs)

 次のようにbtnSend_Clickイベントハンドラを修正してください。

index.aspx.cs

  1. protected void btnSend_Click(object sender, EventArgs e)
  2. {
  3.  //テキストデータをコンテキストに追加
  4.  this.Context.Items.Add("Message", this.txtMessage.Text);
  5.  //車情報をコンテキストに追加
  6.  this.Context.Items.Add("Vehicle", this.ddlVehicle.SelectedValue);
  7.  //フルーツ情報をコンテキストに追加
  8.  this.Context.Items.Add("FruitsList", this.chkFruits);
  9.  //ページ遷移
  10.  this.Context.Server.Transfer("receive.aspx");
  11. }

○ デザイン(receive.aspx)

Webフォーム内の見出しをRedirect → Transferに変更してください。また、lblQueryStringを削除してください。

コントロールの配置例
コントロールの配置例

○ プログラム(receive.aspx.cs)

 次のようにプログラムを記述してください。

receive.aspx.cs

  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3.  //受信した内容を表示
  4.  this.lblMessage.Text = this.Context.Items["Message"].ToString();
  5.  this.lblVehicle.Text = this.Context.Items["Vehicle"].ToString();
  6.  //CheckBoxListを取得
  7.  CheckBoxList chklist = (CheckBoxList)this.Context.Items["FruitsList"];
  8.  //ループしてチェックされたデータを表示
  9.  foreach(ListItem li in chklist.Items)
  10.  {
  11.   if (li.Selected)
  12.   {
  13.    this.lblFruits.Text += li.Text + ",";
  14.   }
  15.  }
  16.  //余分についたカンマを除去
  17.  if (this.lblFruits.Text.EndsWith(","))
  18.  {
  19.   this.lblFruits.Text = this.lblFruits.Text.Remove(this.lblFruits.Text.LastIndexOf(","), 1);
  20.  }
  21. }

○ 実行結果

 index.aspxを実行してください。

実行結果
実行結果

○ 解説

 index.aspx.csの37、40行目では、ユーザーが入力した文字列をHttpContextオブジェクトに追加しています。コレクションにキー名、値のセットで登録します。43行目ではCheckBoxListコントロールをHttpContextオブジェクトに追加しています。

 Receive.aspx.csの15、16行目は、HttpContextオブジェクトに追加しておいた文字列を、キー名を指定して取り出しています。HttpContextオブジェクトはオブジェクト型のデータを保存します。そのため、取り出したときにどのようなデータ型かを指定する必要があります。今回は、ToStringメソッドを使って文字列表現を取得しています。

 19行目ではHttpContextオブジェクトから、前のページで保存しておいたCheckBoxListコントロールを取り出しています。HttpContextオブジェクトから取り出したデータをCheckBoxListコントロールとして扱うためにCheckBoxList型にキャストして変数に格納しています。あとは、項目のリストを一つ一つ確認して、チェックされている項目を取り出して表示しています。

 今回のサンプルでは実行後のWebブラウザーのアドレス欄を見るとわかるように、URLが変化していません。サーバー内部で転送され、転送先の処理が結果としてWebブラウザーに表示されています。サーバーの内部でデータの転送が扱われるため、データのデータ型は文字列以外でも扱うことができます。

前へ   次へ