メインメニュー
ASP.NET 2.0はこちら
Tips1ではページの遷移に関する違いを説明しました。 今回はページを遷移した時に値も遷移させる方法を紹介したいと思います。 ページを遷移した時前のページに入力された(もしくは表示されていた)値を使いたい。 といった時に使われると思います。3種類の方法を使って作ってみました。 クエリ文字列・クッキー・セッションです。1つずつ内部の動きが違うのでコードを見て、 実際に動かしてみてください。ただ、ボタンを押しても戻ってくる結果はほとんど同じです… あまりにも解りづらいので、クッキーとセッションは一部強引な仕掛けをしています。 では始めましょう。
1つ目はURLの後ろにクエリ文字列として持たせる方式です。 urlの一番後ろに"?"を記述し、それ以降に"名前 = 値"と記述することで 遷移したページに値を持たせることが可能です。 例では、ボタンを押す事でUrlの後ろにクエリ文字列を"name = naoki"と持たせて Redirectをし、下のテキストボックスにクエリ文字列を表示するというものです。
Private Sub btnRed1_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles btnRed1.Click Response.Redirect("webtips2.aspx?name=" & Server.UrlEncode("naoki")) End Sub
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles MyBase.Load If Not IsPostBack Then txtQueryString.Text = Request.QueryString("name") End If End Sub
以上の手順を踏んでいただければ、クエリ文字列を使った値の遷移がわかっていただけたかと思います。 備考として、URLの"name="の後の文字を任意の物に書き換えてエンターキーを押して見ると、 その入力された値がTextBoxに表示されます。
次はクッキーです。クッキーとはある条件を利用してクライアントのコンピュータにデータを 書き込み保存する機能です。HttpCookieクラスを作成し、Response.Cookieでクライアントに クッキーの書き込みを行います。 例では、ボタンを押すことでテキストボックスに入力された文字をクッキーとして作成し、 クライアントに書き込み、Redirect後クライアントからクッキーを取り出し、 下のテキストボックスに表示するというものです。
Private Sub btnCookie_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles btnCookie.Click Dim Cookietest As HttpCookie = _ New HttpCookie("Cookie1", txtmakeCookie.Text) Response.Cookies.Add(Cookietest) Response.Redirect("webtips2.aspx?Cookie") End Sub
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles MyBase.Load If Not IsNothing(Request.Cookies("Cookie1")) Then txtuseCookie.Text = Request.Cookies("Cookie1").Value End If End Sub
以上の手順を踏んでいただければ、クッキーを使った値の遷移が解っていただけたと思います。
次はセッションです。セッションとはユーザーがあるアプリに接続している間の操作の事を指します。 異なるページ間の情報を保持する時に、このセッションステート変数を用いるパターンが多いです。 例では、ボタンを押すことでテキストボックスに入力された文字をセッション変数として保持し、 Redirect後にセッション変数から値を受け取り、下のテキストボックスに表示するというものです。
Private Sub btnSession_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles btnSession.Click Session("Session1") = txtmakeSession.Text Response.Redirect("webtips2.aspx?Session") End Sub
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles MyBase.Load If Not IsNothing(Session("Session1")) Then txtuseSession.Text = Session("Session1").ToString End If End Sub
以上の手順を踏んでいただければ、セッションを使った値の遷移が解っていただけたと思います。
今回は3種類の値遷移の技術を紹介しました。好みがはっきりと別れると思いますが、個人的に お勧めはSessionです。クエリ文字列はURLに値を持たせる以上、重要なデータを持たせるのには 不適格です。Cookieはクライアントに対して有効期限を持たせることによりさらにスコープを 絞ったり広げたり出来そうですが、クライアントPCにデータを置くと言う事を忘れないように しましょう(やり方によっては改竄可能なので。) ASP.NET開発を続けていくと、ページ遷移時に値の遷移もすると言う事はよくあります。 パフォーマンスや状況、要求を満たす物を吟味して使用してみてください。