2005-06-22 暑くてトロけそうです。
Webページの遷移について(実行編)
さーて。今回はコードも書いて見たので、それを載せて、書いてみたいと思います。今回は…Executeは勘弁してください(⊃д⊂)
それじゃー先ず最初に、RedirectとTransferを使って簡単にコードを書いてみます。
画像が貼れないのでイメージが湧きづらいかもしれませんが、コードの内容は至ってシンプルです。コードはVB.NETですのでご容赦を。
WebForm1はButtonが1つ。WebForm2にはLabel(textは”遷移しました。”に設定)を1つ貼り付けた状態にします。
↓先ずはRedirect
Private Button1_Click(Byval sender as System.Object, _
Byval e as System.EventArgs) Handles Button1.Click
Response.Redirect("WebForm2.aspx")
End sub
↓続いてTransfer
Private Button1_Click(Byval sender as System.Object, _
Byval e as System.EventArgs) Handles Button1.Click
Server.Transfer("WebForm2.aspx")
End sub
この2つのコードはボタンを押した時WebForm1からWebForm2にページを遷移するというものです。
この状態でそれぞれWebForm1をスタートページに設定し、実行します。
Button1を押した時Redirect・Transfer共に”遷移しました”とかかれたWebForm2に遷移します。
これがWebForm間のページの遷移です。しかし何故2種類もあるのでしょう?
それには理由があります。それはすぐ次の日記に書かせていただきます。長くなってきたので小休止。
Webページの遷移について(相違編)
1つ前の日記でどちらも遷移はする。ということは確認できたと思います。では、何が違うのか書いて行きたいと思います。シンプルに言うと、
と言う事です。
リンク貼ってくださったのでそっちから引用しますか(笑)
- Redirectメソッドが呼び出されると、ユーザーからはポストバックが1度だけ行われたように見えるが、実際には2度のラウンド・トリップが行われ、その間に最初にポストした情報は失われてしまう。従って、Redirectメソッドを使っても、別ページへのポストバックを実現することはできない。
- Transferメソッドの場合は、それを呼び出しただけではレスポンスが生成されることはなく、そのままサーバ上で指定されたページへと処理が移行される。つまり、ラウンド・トリップは1度だけなのに、2つのASP.NETページが連続して処理されることになる。このため、最初にポストバックされているsampleA.aspxが実行されていたときに生成されたオブジェクトは、まだメモリ上に残されていて、移行先のsampleB.aspxからアクセスできる。
以上の事からTransfer・Redirectの機能の違いがわかったと思います。
注意点として、TransferはYahoo!等の外部のサイト(フルパスが必要なサイト)へ遷移する事は出来ないと言うことです。同一サーバ内でのみ活用する事ができるメソッドです。そして、Redirectとの使い分けはそれが重要になってきます。そしてもう1つ、Transferは同一サーバ内の.aspxファイルにしか遷移する事が出来ません。.aspや.asmx等のファイルには遷移する事が出来ないのを覚えておいてください。以上の事に注意すれば、Transferを有効に活用できるのではないでしょうか?逆に同一サーバ内にアクセスする時Redirectを使うメリットが余り無い時は積極的にTransferを使いましょう。
Redirectは上からも解るように異なる拡張子、外部のサイトへと遷移する事も可能です。
以上が私が調べたTransferとRedirectの違いと注意点です。未だにASP.NETに触れていなくて詰まってしまった時上に記述した事が役に立てれば幸いです。














