Server.Transfer,Response.Redirect的區(qū)別
更新時間:2006年12月06日 00:00:00 作者:
如果你讀過很多行業(yè)雜志和 ASP.NET 示例,你會發(fā)現(xiàn),大多數(shù)人使用 Response.Redirect 將用戶引導到另一個頁面,而另一些人好像偏愛于神秘的 Server.Transfer,那么,這二者有什么區(qū)別?
Response.Redirect 簡單地發(fā)送一條消息到瀏覽器,告訴瀏覽器定位到另一個頁面。你可以使用下面的代碼將用戶引導到另一個頁面:
Response.Redirect("WebForm2.aspx")
或者
Response.Redirect("http://www.karlmoore.com/")
Server.Transfer 也是通過一條語句將用戶引導到另一頁面,比如:Server.Transfer("WebForm2.aspx")。不過,這條語句有一系列獨特的優(yōu)缺點。
首先,通過 Server.Transfer 引導到另一頁面保留服務器資源,通過更改服務器端“焦點”和傳輸請求來代替告訴瀏覽器重定向,這就意味著你不會占用較多的 HTTP 請求,因此這可以減輕服務器的壓力,使你的服務器運行更快。
不過,請注意,由于 "transfer" 只能在同一服務器端的同一站點間運行,所以你不能用 Server.Transfer 將用戶重定向到另一服務器上的站點。要重定向到服務器以外的站點,只有 Response.Redirect 能辦到。
其次,Server.Transfer 保留瀏覽器端的 URL 地址。這對流線型的數(shù)據(jù)輸入很有幫助,不過這也增加了調試的復雜度。
還有:Server.Transfer 方法還有另一個參數(shù)——"preserveForm"。如果你設置這個參數(shù)為 True,比如:Server.Transfer("WebForm2.aspx", True), 那么 query string 和任何 form 變量都會同時傳遞到你定位的頁面。
例:WebForm1.aspx 有一個文本框名為 TextBox1,你利用 preserveForm 為 True 傳遞到 WebForm2.aspx,你仍然可以用 Request.Form("TextBox1") 來取得文本框的值。
這種技術對向導式的多頁面輸入很有用,不過這里有一個你必須注意的問題是,當你使用 preserveForm 參數(shù)時,ASP.NET 有一個 bug,通常情況下,當試圖傳遞 form 或 query string 值時會發(fā)生錯誤。請參見: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 執(zhí)行一個頁面,并返回結果,在過去 Server.Execute 很有用,不過在 ASP.NET 里,它被 fresher 方法所代替,所以忽略 Server.Execute。
Response.Redirect 簡單地發(fā)送一條消息到瀏覽器,告訴瀏覽器定位到另一個頁面。你可以使用下面的代碼將用戶引導到另一個頁面:
Response.Redirect("WebForm2.aspx")
或者
Response.Redirect("http://www.karlmoore.com/")
Server.Transfer 也是通過一條語句將用戶引導到另一頁面,比如:Server.Transfer("WebForm2.aspx")。不過,這條語句有一系列獨特的優(yōu)缺點。
首先,通過 Server.Transfer 引導到另一頁面保留服務器資源,通過更改服務器端“焦點”和傳輸請求來代替告訴瀏覽器重定向,這就意味著你不會占用較多的 HTTP 請求,因此這可以減輕服務器的壓力,使你的服務器運行更快。
不過,請注意,由于 "transfer" 只能在同一服務器端的同一站點間運行,所以你不能用 Server.Transfer 將用戶重定向到另一服務器上的站點。要重定向到服務器以外的站點,只有 Response.Redirect 能辦到。
其次,Server.Transfer 保留瀏覽器端的 URL 地址。這對流線型的數(shù)據(jù)輸入很有幫助,不過這也增加了調試的復雜度。
還有:Server.Transfer 方法還有另一個參數(shù)——"preserveForm"。如果你設置這個參數(shù)為 True,比如:Server.Transfer("WebForm2.aspx", True), 那么 query string 和任何 form 變量都會同時傳遞到你定位的頁面。
例:WebForm1.aspx 有一個文本框名為 TextBox1,你利用 preserveForm 為 True 傳遞到 WebForm2.aspx,你仍然可以用 Request.Form("TextBox1") 來取得文本框的值。
這種技術對向導式的多頁面輸入很有用,不過這里有一個你必須注意的問題是,當你使用 preserveForm 參數(shù)時,ASP.NET 有一個 bug,通常情況下,當試圖傳遞 form 或 query string 值時會發(fā)生錯誤。請參見: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 執(zhí)行一個頁面,并返回結果,在過去 Server.Execute 很有用,不過在 ASP.NET 里,它被 fresher 方法所代替,所以忽略 Server.Execute。
相關文章
C# XML操作 代碼大全(讀XML,寫XML,更新,刪除節(jié)點,與dataset結合等)
C#操作XML(讀XML,寫XML,更新,刪除節(jié)點,與dataset結合等),以下就是操作XML的所有方法,相信可以滿足很大一部份的使用了。2009-06-06asp.net利用cookie保存用戶密碼實現(xiàn)自動登錄的方法
這篇文章主要介紹了asp.net利用cookie保存用戶密碼實現(xiàn)自動登錄的方法,實例分析了asp.net針對cookie的創(chuàng)建、提取與銷毀操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-01-01ASP.NET MVC制作404跳轉實例(非302和200)
本篇文章主要介紹了ASP.NET MVC制作404跳轉實例(非302和200) ,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04asp.net?core?+?jenkins?實現(xiàn)自動化發(fā)布功能
這篇文章主要介紹了asp.net?core?+?jenkins?實現(xiàn)自動化發(fā)布功能,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04ASP.NET UserControl 通信的具體實現(xiàn)
下面我就用ASP.NET的UserControl模擬SharePoint UserControl通信,兩者的本質,思想和實現(xiàn)方式都不變。2013-06-06Asp.net內置對象之Cookies(簡介/屬性方法/基本操作及實例)
本文將圍繞cookies了解Cookies對象/Cookie對象的屬性和方法/Cookie的基本操作及實例:Cookie的寫入和讀取/Cookie對象相比Session、Application的優(yōu)缺點扥等,感興趣的朋友可以了解下,或許對你學習cookies有所幫助2013-02-02asp.net c#采集需要登錄頁面的實現(xiàn)原理及代碼
當我們采集頁面的時候,如果被采集的網(wǎng)站需要登錄才能采集,原理搞清楚了,就好辦了,我們所要做的僅僅是在采集的時候(或者說HttpWebRequest提交數(shù)據(jù)的時候),將Cookie信息放入Http請求頭里面就可以了,感興趣的朋友可以了解下,或許對你有所幫助2013-02-02