Server.Transfer和Response.Redirect的區別

    Response.Redirect 簡單地發送一條消息到瀏覽器,告訴瀏覽器定位到另一個頁面。

你可以使用下面的代碼將 用戶引導到另一個頁面:

Response.Redirect("WebForm2.aspx")

或者 Response.Redirect(http://www.163.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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章