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
が発生します。
このException
をCatch
して予期せぬ処理が起こらないようにします。
エラーが発生する場合
デバッグビルドでは発生しなかったのに、リリースビルドだと以下のエラーが発生することがあります。
エラー
スレッドを中止しようとしました。
以下のように全てのエラーを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
で実装する場合は上記の仕組みを理解しておくとよいです。