【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
 
 

連載

プログラミングASP.NET
― ASP.NETによるWebアプリケーション実践開発講座 ―

第16回 ASP.NETにおけるページの遷移

田口 景介
2003/04/05

Page1 Page2 Page3 Page4


Back Issue
1
ASP.NETがもたらす次世代のWebプログラミング
2
ASP.NETの基礎 サーバ・コントロール編
3
ASP.NETの基礎 イベント編
4
ASP.NETページのフレームワーク(前編)
5
ASP.NETページのフレームワーク(後編)
6
Webサーバ・コントロール(前編)
7
Webサーバ・コントロール(中編)
8
Webサーバ・コントロール(後編)
9
Webフォームにおけるデータ連結 Part1 データ連結とは
10
Webフォームにおけるデータ連結 Part2 DataListコントロール
11
Webフォームにおけるデータ連結 Part3 DataGridコントロール
12
Webフォームにおけるデータ連結 Part4 DataGridでの編集
13
スタイル(前編)
14 スタイル(後編)
15 セッションとビューステート

別ページへの遷移

 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から戻すことができるというわけだ。


 INDEX
  プログラミングASP.NET
  第16回 ASP.NETにおけるページの遷移
  1.別ページへの遷移
    2.遷移元ページのアクセス
    3.フレームとの組み合わせ
    4. クエリ文字列の利用
 
インデックス・ページヘ  「連載 :プログラミングASP.NET」

ホワイトペーパーTechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています