zukucode
主にWEB関連の情報を技術メモとして発信しています。

ASP.NET Response.Redirectで別画面に画面遷移する

ASP.NETで別画面(別URL)に画面遷移したいときはResponse.Redirectを使用することが多いです。

Try
    '別画面に移動
    Response.Redirect("/foo.aspx", True)
Catch ex As Threading.ThreadAbortException
    '何もしない
End Try

なぜTry-Catchで囲うかというと、Response.Redirectを実行することにより、以降の処理が中止される(Response.Endが実行される)ため、Threading.ThreadAbortExceptionが発生します。

このExceptionCatchして予期せぬ処理が起こらないようにします。

エラーが発生する場合

デバッグビルドでは発生しなかったのに、リリースビルドだと以下のエラーが発生することがあります。

エラー
スレッドを中止しようとしました。

以下のように全てのエラーをCatchする処理を追加するとうまく行きます。

Try
    '別画面に移動
    Response.Redirect("/foo.aspx", True)
Catch ex As Threading.ThreadAbortException
Catch ex As Exception
    '何もしない
End Try

引数を指定して処理を継続する

Response.Redirectの第2引数にFalseを指定すると、Response.Endが実行されずに処理が続行します。

以下のような場合、処理Aは実行されます。また、Try-Catchの処理は不要となります。

'別画面に移動
Response.Redirect("/foo.aspx", False)

'処理A

処理の流れ

上記の場合、遷移先の/foo.aspxのロード処理と処理Aは、処理Aが先に実行されます。

Response.Redirectは画面遷移する処理をブラウザに対してレスポンスして、指定されたURIに自動的に遷移する処理はブラウザが行うという仕組みになっています。

つまり、実際に遷移するのはResponse.Redirect、処理Aを含む遷移元のサーバー処理がすべて完了してブラウザにレスポンスされた後になります。

Response.Redirectの第2引数をTrueにしておけば気にする必要はありませんが、Falseで実装する場合は上記の仕組みを理解しておくとよいです。


関連記事