2012-05-09 5 views
1

私は通常のAsp.Net 4.0ウェブフォームウェブサイトを持っています。私がするとき:なぜResponse.Redirectは次のコード行を実行しないのですか?

Response.Redirect("SomePage.aspx"); 

私は次のコード行が実行されると思います。しかし、驚くべきことに、次のコード行は決して実行されません。誰がいつ、なぜそれが起こるのかを知ることができますか?

+0

既にページをリダイレクトしています。したがって、次の行のコードは実行されません。 – Raptor

+0

@ Shivan:どうですか? Response.Redirectはレスポンスヘッダーに位置ヘッダーを設定するだけでよいはずですか?次の行が実行されないようにする "return"キーワードを含んでいますか? – Jaggu

+0

@Shadow_boiがあなたに答えました。 – Raptor

答えて

4

Response.Redirect also accepts two parametersブール値である2番目のパラメータは、現在のページの実行を終了する必要があるかどうかを示します。

したがって、Response.Redirect("Page.aspx",false)を呼び出すと、後続のコード行が実行され、ログファイルにThreadAbortExceptionが浸水することがなくなります。

更新:デフォルトの動作はResponse.Redirectは期待を使用している

がクライアントにのみ302ヘッダを送信することで実行しないことですなぜに答えるために。したがって、デフォルトでは、応答&は現在のスレッドを強制終了し、後続の処理は実行されません。

例:認可/認証モジュールで、ユーザーがリソースにアクセスする資格がないことがわかったら、セキュリティの理由からリダイレクトを行い、イベントライフサイクルの残りの部分を実行しないでください。

5

元のURLで示されたページの表示されたHTMLテキストやResponse.Writeテキストなど、応答本文の内容は無視されます。 さらに、Redirectメソッドが処理されると、現在のページでのコードの実行が終了し、ページ内の後続のコードも無視されます。

ソース:http://msdn.microsoft.com/en-us/library/ms524309(v=vs.90).aspx

-1

のResponse.Redirect関数内のステートメントを返すに等しいです。戻り値の後に書く行は決して実行されません。 response.redirect()も同じです。現在のページの実行は、response.redirect()の後に終了します。