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.vb)

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

index.aspx.vb

  1. Protected Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click
  2.  'テキストデータをコンテキストに追加
  3.  Me.Context.Items.Add("Message", Me.txtMessage.Text)
  4.  '車情報をコンテキストに追加
  5.  Me.Context.Items.Add("Vehicle", Me.ddlVehicle.SelectedValue)
  6.  'フルーツ情報をコンテキストに追加
  7.  Me.Context.Items.Add("FruitsList", Me.chkFruits)
  8.  'ページ遷移
  9.  Me.Context.Server.Transfer("receive.aspx")
  10. End Sub

○ デザイン(receive.aspx)

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

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

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

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

receive.aspx.vb

  1. Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  2.  '受信した内容を表示
  3.  Me.lblMessage.Text = Me.Context.Items("Message").ToString()
  4.  Me.lblVehicle.Text = Me.Context.Items("Vehicle").ToString()
  5.  'CheckBoxListを取得
  6.  Dim chklist As CheckBoxList = Me.Context.Items("FruitsList")
  7.  'ループしてチェックされたデータを表示
  8.  For Each li As ListItem In chklist.Items
  9.   If li.Selected Then
  10.    Me.lblFruits.Text &= li.Text & ","
  11.   End If
  12.  Next
  13.  '余分についたカンマを除去
  14.  If Me.lblFruits.Text.EndsWith(",") Then
  15.   Me.lblFruits.Text = Me.lblFruits.Text.Remove(Me.lblFruits.Text.LastIndexOf(","), 1)
  16.  End If
  17. End Sub

○ 実行結果

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

実行結果
実行結果

○ 解説

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

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

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

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

前へ   次へ