2015年11月9日月曜日

HttpResponse.Redirect メソッド (String)とは

こんにちは山田です。
エアコンと床暖のランニングコストはどっちがお得なんだろうと
最近気になっています。

季節ネタはさておき今回は、使用していたリダイレクトメソッドを
調べてみたのでその備忘録になります。

開発環境:ASP.NET 2.0

■HttpResponse.Redirect メソッド (String)とは

ASP.NETで画面遷移行う時Response.Redirect(string)を使います。
具体的には、クライアントに現在の処理を終了させて指定したURL(stringのこと)に遷移させることができます。

try-catch文を記すと常に例外が起こる仕様になっているようで
その時は第二引数にfalseを指定させて、Response.Endを呼ばせなくすることができるそうです。

調べたら似たようなメソッドで HttpServerUtility.Transferメソッドというものがありました。

■HttpServerUtility.Transferメソッドとの違い
このメソッドも指定したページへと処理を移すという点ではRedirectメソッドと同じなのですが、
動作の中身が大きく違うようです。

大きく違う点は
Redirectメソッドの場合は、ユーザーからの見た目上では、ポストバックが一度だけのように見えるが
 実はリクエストとレスポンスがそれぞれが2回ずつ起きているのです。
 一度目のレスポンスで、ポストした情報が消えてしまうので、ポストバックをさせたい場合はこの方法を使うことができません。
一方、Transferメソッドの場合は、ページが書き換わったあとページ遷移はサーバ内部で行われるため。
 遷移前にページで生成したオブジェクトが、メモリ上に残っているので遷移先のページからアクセスすることができます。

ページをまたいでポストバックできるってことですね。便利そうです。








1 件のコメント:

  1. ページをまたいだポストバックには「クロスポストバック」という方法を使用することもできます。
    http://www.atmarkit.co.jp/fdotnet/dotnettips/406asppostback1/asppostback1.html

    Server.Transfer()を使用する方法では、
    元のページ側でのイベントライフサイクルが進んでしまい、
    例えばPage_Load()でServer.Transfer()を呼ぶと
    元のページのPage_Init()等のイベントも発生します。Server.Transfer()するのであれば、
    この辺のライフサイクルイベントはほとんど無駄です。

    ですので、単にページをまたいだポストバックをさせたい場合は「クロスポストバック」の利用を検討して下さい。

    返信削除