こんにちは山田です。
エアコンと床暖のランニングコストはどっちがお得なんだろうと
最近気になっています。
季節ネタはさておき今回は、使用していたリダイレクトメソッドを
調べてみたのでその備忘録になります。
開発環境: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メソッドの場合は、ページが書き換わったあとページ遷移はサーバ内部で行われるため。
遷移前にページで生成したオブジェクトが、メモリ上に残っているので遷移先のページからアクセスすることができます。
ページをまたいでポストバックできるってことですね。便利そうです。
登録:
コメントの投稿 (Atom)
ページをまたいだポストバックには「クロスポストバック」という方法を使用することもできます。
返信削除http://www.atmarkit.co.jp/fdotnet/dotnettips/406asppostback1/asppostback1.html
Server.Transfer()を使用する方法では、
元のページ側でのイベントライフサイクルが進んでしまい、
例えばPage_Load()でServer.Transfer()を呼ぶと
元のページのPage_Init()等のイベントも発生します。Server.Transfer()するのであれば、
この辺のライフサイクルイベントはほとんど無駄です。
ですので、単にページをまたいだポストバックをさせたい場合は「クロスポストバック」の利用を検討して下さい。