頁面跳轉及Response.Redirect和Server.Transfer的區別

來源:互聯網
上載者:User

前台頁面跳轉方式:
1、帶frame的跳轉
   a   window.frames.frameName.location.href= url; //frameName代表某個frame,url代表跳轉的路徑。

   b   開啟一個新視窗,window.open(url,'frameName');
2、不帶frame的跳轉
   a    window.location.href=url;
   b    window.history.back(-1);//後退
   c    window.history.go(-1||-2||...);//後退到前一||二||。。。頁面
   d    window.navigate(url);
   e    self.location = url;
   f    top.location = url;
   g    window.location.reload();//重新整理當前頁面
   h    parent.location.reload();//重新整理父親對象頁面
   i    opener.location.reload();//重新整理父視窗頁面

 

後台跳轉:

1.HyperLink 伺服器控制項

   HTML和ASP中,我們經常用<a href=target.asp>目標</a>方式實現頁面的跳轉,在ASP.Net中仍可用此方法,另外還可用HyperLink服務控制項代替,如下:

    <form id="form1" runat="server">
    <div>
        <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="target.aspx">目標</asp:HyperLink></div>
    </form>

        上述兩種方法實現結果一樣,但是有一點重要區別,HyperLink伺服器控制項可以在伺服器端編程,目標頁可以根據當前的狀態進行動態變化.
註: HyperLink控制項本身沒有事件,因此只能在其他事件中設定NavigateUrl屬性,例如:Page_Load.

2.編程
   HyperLink實現從一頁面到另一頁面的跳轉的方式是完全由使用者控制跳轉時機的,如果在跳轉之前添加條件判斷,使用編程實現比較方便.
    使用代碼實現頁面跳轉的方法有: Response.Redirect, Server.Transfer,Server.Execute

(1)Response.Redirect
  從頁面A跳轉到頁面B,內部控制項儲存的所有資料資訊將丟失,因此頁面B無法訪問頁面A提交的資料,跳轉後瀏覽器的URL資訊改變,但是可以通過Session,Cookie,Application等對象進行頁面間的資料傳遞.
  Response.Redirect重新導向操作發生在用戶端,總共會涉及到兩次與Web伺服器的通訊.

(2)Server.Transfer
頁面A跳轉到頁面B,同時頁面處理的控制權也進行移交,在跳轉過程中Request,Session等儲存的資訊不變,瀏覽器的URL仍儲存A的URL資訊.
  Server.Transfer的重新導向請求在伺服器端進行,用戶端不知曉伺服器執行了頁面轉換,因此URL保持不變.

(3)Server.Execute
 Server.Execute 方法允許當前頁面執行同一Web伺服器上的另一頁面,當另一頁面執行完畢後,控制流程程重新返回到原頁面發出Server.Execute 調用的位置,被調用頁面Page指令的EnableViewStateMac屬性需要設定為False;

 

跳轉方式的選擇:

HyperLink 伺服器控制項---------使用者決定何時轉換,使用者決定轉換的時機

Response.Redirect------需要連結到另一台伺服器的情況,需要連結到非aspx類型的頁面的時候,需要將查詢字串作為URL一部分保留的情況

Response.Redirect和Server.Transfer的區別

引自:http://blog.csdn.net/popule_daisy/archive/2008/09/10/2907304.aspx

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

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

切換對象:

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

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

資料保密:

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

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

==============

lovehongyuan的總結:

 

server.Transfer:
對於當前請求,終止當前頁的執行,並使用指向一個新頁的指定 URL 路徑來開始執行此新頁。

傳輸到的頁也應該是 .aspx 頁。例如,傳輸到 .asp 或 .asmx 頁是無效的。Transfer 方法保留 QueryString 和 Form 集合。

Transfer 調用 End,後者在完成時引發 ThreadAbortException 異常。

ASP.NET 不驗證目前使用者是否有權查看由 Transfer 方法確定資源。雖然 ASP.NET 授權和身分識別驗證邏輯運行於調用原始資源處理常式之前,但 ASP.NET 仍將直接調用 Transfer 方法指示的處理常式,並且不為新資源重新運行授權和身分識別驗證邏輯。如果應用程式的安全性原則要求用戶端具有適當的授權才能訪問相應的資源,則應用程式應強制 再次授權或提供自訂存取控制機制。

------------------------------------------------------------------
Response.Redirect:

將用戶端重新導向到新的 URL 並指定該新 URL
Redirect 方法執行用戶端重新導向,此時瀏覽器請求新資源。此重新導向是一個進入系統的新請求,因此,需要接受 Microsoft Internet 資訊服務 (IIS) 和 ASP.NET 安全性原則的所有身分識別驗證和授權邏輯的檢驗

 

 另外一篇比較Response.Redirect和Server.Transfer的區別的文章

大多數人使用Response.Redirect 將使用者引導到另一個頁面,而另一些人好像偏愛於神秘的Server.Transfer,那麼,Response.Redirect 和Server.Transfer有什麼區別?

  Response.Redirect簡單地發送一條訊息到瀏覽器,告訴瀏覽器定位到另一個頁面。你可以使用下面的代碼將使用者引導到另一個頁面:

  Response.Redirect("WebForm2.aspx")

  或者

  Response.Redirect("http://www.zhisi.net/")

  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),那麼querystring和任何form變數都會同時傳遞到你定位 的頁面。

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

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

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

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

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

  另外

  執行過程

  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。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.