Server.Transfer,Response.Redirect的區(qū)別
更新時(shí)間:2006年12月06日 00:00:00 作者:
如果你讀過(guò)很多行業(yè)雜志和 ASP.NET 示例,你會(huì)發(fā)現(xiàn),大多數(shù)人使用 Response.Redirect 將用戶引導(dǎo)到另一個(gè)頁(yè)面,而另一些人好像偏愛于神秘的 Server.Transfer,那么,這二者有什么區(qū)別?
Response.Redirect 簡(jiǎn)單地發(fā)送一條消息到瀏覽器,告訴瀏覽器定位到另一個(gè)頁(yè)面。你可以使用下面的代碼將用戶引導(dǎo)到另一個(gè)頁(yè)面:
Response.Redirect("WebForm2.aspx")
或者
Response.Redirect("http://www.karlmoore.com/")
Server.Transfer 也是通過(guò)一條語(yǔ)句將用戶引導(dǎo)到另一頁(yè)面,比如:Server.Transfer("WebForm2.aspx")。不過(guò),這條語(yǔ)句有一系列獨(dú)特的優(yōu)缺點(diǎn)。
首先,通過(guò) Server.Transfer 引導(dǎo)到另一頁(yè)面保留服務(wù)器資源,通過(guò)更改服務(wù)器端“焦點(diǎn)”和傳輸請(qǐng)求來(lái)代替告訴瀏覽器重定向,這就意味著你不會(huì)占用較多的 HTTP 請(qǐng)求,因此這可以減輕服務(wù)器的壓力,使你的服務(wù)器運(yùn)行更快。
不過(guò),請(qǐng)注意,由于 "transfer" 只能在同一服務(wù)器端的同一站點(diǎn)間運(yùn)行,所以你不能用 Server.Transfer 將用戶重定向到另一服務(wù)器上的站點(diǎn)。要重定向到服務(wù)器以外的站點(diǎn),只有 Response.Redirect 能辦到。
其次,Server.Transfer 保留瀏覽器端的 URL 地址。這對(duì)流線型的數(shù)據(jù)輸入很有幫助,不過(guò)這也增加了調(diào)試的復(fù)雜度。
還有:Server.Transfer 方法還有另一個(gè)參數(shù)——"preserveForm"。如果你設(shè)置這個(gè)參數(shù)為 True,比如:Server.Transfer("WebForm2.aspx", True), 那么 query string 和任何 form 變量都會(huì)同時(shí)傳遞到你定位的頁(yè)面。
例:WebForm1.aspx 有一個(gè)文本框名為 TextBox1,你利用 preserveForm 為 True 傳遞到 WebForm2.aspx,你仍然可以用 Request.Form("TextBox1") 來(lái)取得文本框的值。
這種技術(shù)對(duì)向?qū)降亩囗?yè)面輸入很有用,不過(guò)這里有一個(gè)你必須注意的問題是,當(dāng)你使用 preserveForm 參數(shù)時(shí),ASP.NET 有一個(gè) bug,通常情況下,當(dāng)試圖傳遞 form 或 query string 值時(shí)會(huì)發(fā)生錯(cuò)誤。請(qǐng)參見:http://support.microsoft.com/default.aspx?id=kb;en-us;Q316920
非官方的解決辦法是在你要傳遞的目的頁(yè)面中設(shè)置 enableViewStateMac 屬性為 True,然后再將其設(shè)置回 False。這說(shuō)明你需要使用 enableViewStateMac 的 False 值才能解決這個(gè)問題。
總結(jié):Response.Redirect 簡(jiǎn)單地告訴瀏覽器訪問另一個(gè)頁(yè)面。Server.Transfer 有利于減少服務(wù)器請(qǐng)求,保持地址欄 URL 不變,允許你將 query string 和 form 變量傳遞到另一個(gè)頁(yè)面(有一點(diǎn)小小的缺陷)。
重要提示:不要混淆了 Server.Transfer 和 Server.Execute,Server.Execute 執(zhí)行一個(gè)頁(yè)面,并返回結(jié)果,在過(guò)去 Server.Execute 很有用,不過(guò)在 ASP.NET 里,它被 fresher 方法所代替,所以忽略 Server.Execute。
Response.Redirect 簡(jiǎn)單地發(fā)送一條消息到瀏覽器,告訴瀏覽器定位到另一個(gè)頁(yè)面。你可以使用下面的代碼將用戶引導(dǎo)到另一個(gè)頁(yè)面:
Response.Redirect("WebForm2.aspx")
或者
Response.Redirect("http://www.karlmoore.com/")
Server.Transfer 也是通過(guò)一條語(yǔ)句將用戶引導(dǎo)到另一頁(yè)面,比如:Server.Transfer("WebForm2.aspx")。不過(guò),這條語(yǔ)句有一系列獨(dú)特的優(yōu)缺點(diǎn)。
首先,通過(guò) Server.Transfer 引導(dǎo)到另一頁(yè)面保留服務(wù)器資源,通過(guò)更改服務(wù)器端“焦點(diǎn)”和傳輸請(qǐng)求來(lái)代替告訴瀏覽器重定向,這就意味著你不會(huì)占用較多的 HTTP 請(qǐng)求,因此這可以減輕服務(wù)器的壓力,使你的服務(wù)器運(yùn)行更快。
不過(guò),請(qǐng)注意,由于 "transfer" 只能在同一服務(wù)器端的同一站點(diǎn)間運(yùn)行,所以你不能用 Server.Transfer 將用戶重定向到另一服務(wù)器上的站點(diǎn)。要重定向到服務(wù)器以外的站點(diǎn),只有 Response.Redirect 能辦到。
其次,Server.Transfer 保留瀏覽器端的 URL 地址。這對(duì)流線型的數(shù)據(jù)輸入很有幫助,不過(guò)這也增加了調(diào)試的復(fù)雜度。
還有:Server.Transfer 方法還有另一個(gè)參數(shù)——"preserveForm"。如果你設(shè)置這個(gè)參數(shù)為 True,比如:Server.Transfer("WebForm2.aspx", True), 那么 query string 和任何 form 變量都會(huì)同時(shí)傳遞到你定位的頁(yè)面。
例:WebForm1.aspx 有一個(gè)文本框名為 TextBox1,你利用 preserveForm 為 True 傳遞到 WebForm2.aspx,你仍然可以用 Request.Form("TextBox1") 來(lái)取得文本框的值。
這種技術(shù)對(duì)向?qū)降亩囗?yè)面輸入很有用,不過(guò)這里有一個(gè)你必須注意的問題是,當(dāng)你使用 preserveForm 參數(shù)時(shí),ASP.NET 有一個(gè) bug,通常情況下,當(dāng)試圖傳遞 form 或 query string 值時(shí)會(huì)發(fā)生錯(cuò)誤。請(qǐng)參見:http://support.microsoft.com/default.aspx?id=kb;en-us;Q316920
非官方的解決辦法是在你要傳遞的目的頁(yè)面中設(shè)置 enableViewStateMac 屬性為 True,然后再將其設(shè)置回 False。這說(shuō)明你需要使用 enableViewStateMac 的 False 值才能解決這個(gè)問題。
總結(jié):Response.Redirect 簡(jiǎn)單地告訴瀏覽器訪問另一個(gè)頁(yè)面。Server.Transfer 有利于減少服務(wù)器請(qǐng)求,保持地址欄 URL 不變,允許你將 query string 和 form 變量傳遞到另一個(gè)頁(yè)面(有一點(diǎn)小小的缺陷)。
重要提示:不要混淆了 Server.Transfer 和 Server.Execute,Server.Execute 執(zhí)行一個(gè)頁(yè)面,并返回結(jié)果,在過(guò)去 Server.Execute 很有用,不過(guò)在 ASP.NET 里,它被 fresher 方法所代替,所以忽略 Server.Execute。
相關(guān)文章
把ASP.NET MVC項(xiàng)目部署到本地IIS上的完整步驟
最近會(huì)經(jīng)常修改一些網(wǎng)站前端的內(nèi)容,為了方便跟UI和產(chǎn)品交流,需要將自己修改過(guò)的頁(yè)面及時(shí)發(fā)布到測(cè)試機(jī)或者是本地的IIS上。下面這篇文章主要給大家介紹了關(guān)于如何把ASP.NET MVC項(xiàng)目部署到本地IIS上的相關(guān)資料,需要的朋友可以參考下2018-06-06
.Net Core自動(dòng)化部署之利用docker版jenkins部署dotnetcore應(yīng)用的方法
這篇文章主要給大家介紹了關(guān)于.Net Core自動(dòng)化部署之利用docker版jenkins部署dotnetcore應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06
.NET 6實(shí)現(xiàn)基于JWT的Identity功能方法詳解
在.NET Web API開發(fā)中還有一個(gè)很重要的需求是關(guān)于身份認(rèn)證和授權(quán)的。本文將介紹使用.NET框架自帶的認(rèn)證和授權(quán)中間件去實(shí)現(xiàn)基于JWT的身份認(rèn)證和授權(quán)功能的方法詳解,需要的可以參考一下2022-01-01
Windows Server 2012 R2 或 2016無(wú)法安裝.Net 3.5.1
這篇文章主要為大家詳細(xì)介紹了Windows Server 2012 R2 或 2016 無(wú)法安裝 .Net 3.5.1,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
在ASP.NET Core中應(yīng)用HttpClient獲取數(shù)據(jù)和內(nèi)容
這篇文章主要介紹了在ASP.NET Core中集成和使用HttpClient獲取數(shù)據(jù)和內(nèi)容,幫助大家更好的理解和學(xué)習(xí)使用ASP.NET Core,感興趣的朋友可以了解下2021-03-03
asp.net實(shí)現(xiàn)的DES加密解密操作示例
這篇文章主要介紹了asp.net實(shí)現(xiàn)的DES加密解密操作,結(jié)合具體實(shí)例形式分析了asp.net實(shí)現(xiàn)DES加密與解密算法的實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-07-07
asp.net(c#)復(fù)數(shù)類(復(fù)數(shù)加減乘除四則運(yùn)算)
asp.net(c#)復(fù)數(shù)類(復(fù)數(shù)加減乘除四則運(yùn)算)...2007-06-06

