第16回 ASP.NETにおけるページの遷移連載 プログラミングASP.NET ―ASP.NETによるWebアプリケーション実践開発講座― (1/4 ページ)

ASP.NETには、別ページに遷移し、ページ間でデータを受け渡しする方法がいくつか用意されている。その仕組みと応用例を解説する。

» 2003年04月05日 00時00分 公開
[田口景介]
連載 プログラミングASP.NET ― ASP.NETによるWebアプリケーション実践開発講座 ― 
Insider.NET

 

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

連載目次

別ページへの遷移

 ASP.NETでは、同一ページへのポストバックしかサポートされていない。おかげで、ページからページへデータを受け渡すには、フォーム以外の方法を取らざるをえない。例えば、Sessionプロパティに値を格納してからページを移動する、クエリ文字列に値を指定する(詳しくは後述)などだ。しかし、どちらも大量データの受け渡しには向かず、効率が悪い。より効率的にデータを渡すには、Transferメソッドを使って、擬似的に別ページへとポストバックする手法が有効だ。

■Transferメソッド

 いま述べたように、ASP.NETでは同一ページにしかポストバックできない。これは揺るぎない制約だが、いったんポストバックされた後に、サーバ・サイドで別ページへと処理を移すことで、擬似的に別ページへのポストバックが実現できる。この処理に使うメソッドが、HttpServerUtility.Transferメソッドである。例えば、以下のように利用すれば、そこでそのページの処理を打ち切り、別ページであるsampleB.aspxへと処理を移すことができる。

  Server.Transfer("sampleB.aspx");

 Transferメソッドとよく似たメソッドに、HttpResponse.Redirectメソッドがある。このメソッドも指定したページへと処理を移すという点ではTransferメソッドと同じだが、その実現方法は大きく違う。その違いが、擬似的な別ページへのポストバックを実現する方法の解説にもつながるので、まずRedirectメソッドについて解説しておこう。

 Redirectメソッドは、このメソッドが以下のように呼び出されると、クライアントへリスト16.1に示すシンプルなレスポンスが送信される。ここには、ASP.NETページのbodyタグに記述したWebページは含まれていない。

  Response.Redirect("sampleB.aspx");

HTTP/1.1 302 Found
Location: /transition/sampleB.aspx

リスト16.1 Redirectメソッドによるレスポンス(一部抜粋)

 そして、このレスポンスを受け取ったクライアントは、Locationヘッダに指示されたURLへとアクセスする。このアクセスはポストバックではなく、通常のWebページへのアクセスと同じように行われるため、サーバへは何も情報は送信されない。

 このように、Redirectメソッドが呼び出されると、ユーザーからはポストバックが1度だけ行われたように見えるが、実際には2度のラウンド・トリップが行われ、その間に最初にポストした情報は失われてしまう。従って、Redirectメソッドを使っても、別ページへのポストバックを実現することはできない。

図16.1 Redirectメソッドの動作
ユーザーからはポストバックが1度だけ行われたように見えるが、実際には2度のラウンド・トリップが行われている。

 それでは、Transferメソッドを呼び出したときはどうなるのか。Transferメソッドの場合は、それを呼び出しただけではレスポンスが生成されることはなく、そのままサーバ上で指定されたページへと処理が移行される。つまり、ラウンド・トリップは1度だけなのに、2つのASP.NETページが連続して処理されることになる。このため、最初にポストバックされているsampleA.aspxが実行されていたときに生成されたオブジェクトは、まだメモリ上に残されていて、移行先のsampleB.aspxからアクセスできる。

図16.2 Transferメソッドの動作
2つのASP.NETページが連続して処理されるため、ラウンド・トリップは1度だけとなる。

 この仕組みを利用すれば、sampleA.aspxへとポストしていながら、その結果をsampleB.aspxから戻すことができるというわけだ。

       1|2|3|4 次のページへ

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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