)Server.Transfer VS Response.Redirect

來源:互聯網
上載者:User

如果你讀過很多行業雜誌和 ASP.NET 樣本,你會發現,大多數人使用 Response.Redirect 將使用者引導到另一個頁面,而另一些人好像偏愛於神秘的 Server.Transfer,那麼,這二者有什麼區別?

Response.Redirect 簡單地發送一條訊息到瀏覽器,告訴瀏覽器定位到另一個頁面。你可以使用下面的代碼將使用者引導到另一個頁面:
Response.Redirect("WebForm2.aspx")
或者
Response.Redirect("http://www.karlmoore.com/")

Server.Transfer 也是通過一條語句將使用者引導到另一頁面,比如:Server.Transfer("WebForm2.aspx")。不過,這條語句有一系列獨特的優缺點。

首先,通過 Server.Transfer 引導到另一頁面保留伺服器資源,通過更改伺服器端“焦點”和傳輸請求來代替告訴瀏覽器重新導向,這就意味著你不會佔用較多的 HTTP 要求,因此這可以減輕伺服器的壓力,使你的伺服器運行更快。

不過,請注意,由於 "transfer" 只能在同一伺服器端的同一網站間運行,所以你不能用 Server.Transfer 將使用者重新導向到另一伺服器上的網站。要重新導向到伺服器以外的網站,只有 Response.Redirect 能辦到。

其次,Server.Transfer 保留瀏覽器端的 URL 地址。這對流線型的資料輸入很有協助,不過這也增加了調試的複雜度。

還有:Server.Transfer 方法還有另一個參數——"preserveForm"。如果你設定這個參數為 True,比如:Server.Transfer("WebForm2.aspx", True), 那麼 query string 和任何 form 變數都會同時傳遞到你定位的頁面。

例:WebForm1.aspx 有一個文字框名為 TextBox1,你利用 preserveForm 為 True 傳遞到 WebForm2.aspx,你仍然可以用 Request.Form("TextBox1") 來取得文字框的值。

這種技術對嚮導式的多頁面輸入很有用,不過這裡有一個你必須注意的問題是,當你使用 preserveForm 參數時,ASP.NET 有一個 bug,通常情況下,當試圖傳遞 form 或 query string 值時會發生錯誤。請參見:http://support.microsoft.com/default.aspx?id=kb;en-us;Q316920

非官方的解決辦法是在你要傳遞的目的頁面中設定 enableViewStateMac 屬性為 True,然後再將其設定回 False。這說明你需要使用 enableViewStateMac 的 False 值才能解決這個問題。

總結:Response.Redirect 簡單地告訴瀏覽器訪問另一個頁面。Server.Transfer 有利於減少伺服器請求,保持地址欄 URL 不變,允許你將 query string 和 form 變數傳遞到另一個頁面(有一點小小的缺陷)。

重要提示:不要混淆了 Server.Transfer 和 Server.Execute,Server.Execute 執行一個頁面,並返回結果,在過去 Server.Execute 很有用,不過在 ASP.NET 裡,它被 fresher 方法所代替,所以忽略 Server.Execute。

關於作者
卡爾·穆爾(MCSD, MVP)是英國約克郡一名經驗豐富的作家。他編寫了一系列技術書籍,包括新出版的  Ultimate VB .NET and ASP.NET Code Book,另外在工業聯合會和BBC電台長期擔任要職。穆爾同樣擁有自己的公司,白崖計算有限公司,點擊訪問其官方首頁http://www.karlmoore.com/.

 

 

另:

執行過程:

1、瀏覽器ASP檔案請求->伺服器執行->遇到response.redirect語句->伺服器發送response.redirect後面的地址給客戶機端的瀏覽器->瀏覽器請求執行新的地址

2、瀏覽器ASP檔案請求->伺服器執行->遇到Server.Transfer語句->伺服器轉向新的檔案

切換對象:

1、Response.Redirect可以切換到任何存在的網頁。

2、Server.Transfer只能切換到同目錄或者子目錄的網頁。

資料保密:

1、Response.Redirect後地址會變成跳轉後的頁面地址。

2、Server.Transfer後地址不變,隱藏了新網頁的地址及附帶在地址後邊的參數值。具有資料保密功能。

傳遞的資料量(網址後附帶的參數):

1、Response.Redirect能夠傳遞的資料以2KB為限。

2、傳遞的資料超過2KB時,務必使用Server.Transfer。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1450874

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.