Server.Transfer():

來源:互聯網
上載者:User

 

1 、 Response.Redirect():

Response.Redirect 方法導致瀏覽器連結到 一個指定的 URL 。當 Response.Redirect() 方法被調用時,它會建立一個應答,應答頭中指出了狀態代 碼 302 (表示目標已經改變)以及新的目標 URL 。瀏覽器 從伺服器收到該應答,利用應答頭中的資訊發出一個對新 URL 的請求 。

 

    這就是說,使用 Response.Redirect 方法時重新導向操作發生在用戶端 ,總共涉及到兩次與伺服器的通訊(兩個來回):第一次是對原始頁面的請求,得到一個 302 應答,第二次是請求 302 應答中聲明的新頁面,得到重新導向之後的頁面。

 

2 、 Server.Transfer():

Server.transfer 是 IIS 5.0 新增加的一個功能。它解決了

Response.Redirect 的兩個重要的缺陷:

1 )在 Response.Redirect 中,我們得不到任何第一頁的輸出

2 ) Response.Redirect 會丟失 request 中的所有屬性

當然我們可以通過一些其他的辦法,比如 session 來搞定,可是,有些頁的參數是在 request 中傳過來的,這樣的話,就不行了

3) Response.Redirect 需要 client 端 再發起一個請求。

 

server.transfer 就很好地解決了這些問題。它是從 server 端直接向下一頁發起請求,不需要 client 再次發送請求 .

如果你的網頁非常依賴 response.redirect, 這個小小的改變可以提高將近 25% 的效率。(根據微軟文檔) .

 

    Server.Transfer 方法把執行流程從當前的 ASPX 檔案轉到同一伺服器上的另一個 ASPX 頁面。調用 Server.Transfer 時,當前的 ASPX 頁面終止 執行,執行流程轉入另一個 ASPX 頁面,但新的 ASPX 頁面仍使用前一 ASPX 頁面建立的應答流 。

 

    如果用 Server.Transfer 方法實現頁面之間的導航,瀏覽器中的 URL 不會改變 ,因為重新導向完全在伺服器端進行,瀏覽器根本不知道伺服器已經執行了一次頁面變換 。

 

    預設情況下, Server.Transfer 方法不會把表單資料或查詢字串從一個頁面傳遞到另一個頁面,但只要把該方法的第二個參數設定成 True ,就可以保留第一個頁面的表單資料和查詢字串 。

 

    同時,使用 Server.Transfer 時應注意一點:目標頁面將使用原始頁面建立的應答流,這導致 ASP.NET 的機器驗證檢查( Machine Authentication Check , MAC )認為新頁面的 ViewState 已被篡改 。因此,如果要保留原始頁面的表單資料和查詢字串集合,必須把目標頁面 Page 指令的 EnableViewStateMac 屬性設定成 False 。

 

server.Transfer() 有一個不足就是 : 當使用者在 a.aspx 中提交了一個表單 , 然後用 Server.Transfer() 進入 b.aspx ,這時如果使用者重新整理 一下頁面,瀏覽器便會問使用者是否“重試 ”發送表單,如果使用者點擊“是”,那麼,表單中的資料被重新發送到伺服器 。如發送表單的作用就是為了向資料庫中插入一條記錄,結果導不希望發生的事——同一表單被多次加入到資料庫中。

 

3 、 Server.Execute

    Server.Execute 方法允許當前的 ASPX 頁面執行一個同一 Web 服務器上 的指定 ASPX 頁面,當指定的 ASPX 頁面執行完畢,控制流程程重新返回原頁面發出 Server.Execute 調用的位置 。

 

    這種頁面導航方式類似於針對 ASPX 頁面的一次函數調用,被調用的頁面能夠訪問發出調用頁面的表單資料和查詢字串集合,所以要把被調用頁面 Page 指令的 EnableViewStateMac 屬性設定成 False 。

 

Server.Execute("another.aspx") 和 Server.Transfer("another.aspx") 區別 : 

Execute 是從當前頁面轉移到指定頁面 , 並將執行返回到當前頁面  

Transfer 是將執行完全轉移到指定頁面

 

 

總結:

在網路狀態較好 的情況下 ,Redirect(url) 方法效率最高 !! 可重新導向到同一台或非同一台 伺服器上的 aspx 或非 aspx ( html )資源

Server.Transfer 方法和 Server.Execute 方法最靈活 !! 但只能轉到同一 Application 目錄下 ,也有可能導致不期望的結果發生

Server.Execute 方法佔用資源最多 .

聯繫我們

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