ここでは、ASP.NET で Server.Transfer と Response.Redirect メソッドを使用したページ遷移のサンプルを掲載しています。それぞれの動作の違いや制約について確認していきたいと思います。
スポンサーリンク
Server.Transfer によるページ遷移
Server.Transfer メソッドを使用したページ遷移のサンプルになります。
VB.NET
Protected Sub Button1_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles Button1.Click Server.Transfer("transfer.aspx") End Sub
C#
protected void Button1_Click(object sender, EventArgs e) { Server.Transfer("transfer.aspx"); }
このときの動作シーケンスは以下のようになります。
- ポストバックによって、サーバ上でボタンクリックイベントが呼び出される
- サーバーで、transfer.aspx のページを読み込みブラウザにレスポンスを返す
- ブラウザはレスポンスを表示する
ここで、ブラウザのアドレスバーをみると、transfer.aspx ではなく、ポストバック先の URL のままのはずです。つまり、ブラウザから見るとページが遷移したわけではありません。サーバーが別ページのレスポンスを返し、それをブラウザが表示しただけです。
なお、Server.Transfer メソッドで指定できる URL には別ドメインのページなどを指定すると例外が発生します。
Response.Redirectによるページ遷移
Response.Redirect メソッドを使用したページ遷移のサンプルになります。
VB.NET
Protected Sub Button1_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles Button1.Click Response.Redirect("redirect.aspx") End Sub
C#
protected void Button1_Click(object sender, EventArgs e) { Response.Redirect("redirect.aspx"); }
動作シーケンスは以下の通です。
- ポストバックによりボタンクリックイベントが呼び出される
- サーバーが、ブラウザに redirect.aspx の URL を返す
- ブラウザは受け取った URL にアクセスする
- サーバーが、redirect.aspx のレスポンスをブラウザに返す
- ブラウザは受け取ったレスポンスを表示する
Server.Transfer を使用した場合と比べサーバー、ブラウザ間のやりとりが2回行われています。無駄のような気もしますが、ASP.NET ではそのような仕組みも存在するということです。ポストバックの宿命というやつでしょうか。もちろん、そもそも form タグの action 属性に ” redirect.aspx ” と記述してあれば、2回もサーバーとやり取りをする必要はありません。その他には、
- ブラウザは、ページ遷移したことを自覚している。(アドレスバーのURLも変化している)
- 別ドメインのページでも遷移可能
であることが言えます。
Pingback: ASP.NET 別ページにポストバックしてページ遷移 (PostBackUrl プロパティ) – 偏差値40の高い壁