首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

ASP.NET 頁面導航七大方式完整對比:Response.Redirect、Server.Transfer、Server.Execute 與客戶端跳轉

     編輯:關於C#

ASP.NET 提供多種頁面導航機制,各有適用場景與副作用。本文系統對比 **伺服器端** 與 **客戶端** 七大方式,含 URL 變化、資料傳遞、驗證機制、效能差異。

伺服器端導航

方法跨伺服器URL 變化表單/查詢字串傳遞ViewState MAC 問題典型場景
Response.Redirect
Response.Redirect("url", false)
✅✅ 變為新 URL❌ 預設不傳遞
true 可保留
無跨站導航、登入後跳轉、錯誤頁
Server.Transfer
Server.Transfer("page.aspx", true)
❌ 同一應用❌ 保持原 URL✅ true 保留⚠️ 目標頁需 EnableViewStateMac="false"多步驟精靈、內部流程跳轉、隱藏實際路徑
Server.Execute
Server.Execute("page.aspx")
❌ 同一應用❌ 保持原 URL✅ 自動共享⚠️ 目標頁需 EnableViewStateMac="false"元件化頁面片段、動態包含、報表區塊

核心差異詳解

1. Response.Redirect (HTTP 302)

  • **兩次往返**:瀏覽器請求 → 302 + Location → 瀏覽器再請求新 URL。
  • endResponse=false (預設 true) 允許後續代碼繼續執行。
  • 可跨應用、跨伺服器、絕對/相對路徑皆可。

2. Server.Transfer (伺服器端轉移)

  • **單次請求**:伺服器內部切換 Handler 執行,瀏覽器不知情,URL 不變。
  • 第二參數 preserveForm=true 保留表單集合與查詢字串。
  • **ViewState MAC 衝突**:目標頁繼承原頁面的 ViewState,MAC 驗證失敗 → **必須關閉目標頁 EnableViewStateMac="false"**。

3. Server.Execute (伺服器端執行)

  • 類似函式呼叫:執行目標頁面渲染結果合併至當前回應流,**返回後繼續原頁面**。
  • 自動共享表單/查詢字串,**同樣需關閉目標頁 MAC 驗證**。
  • 適用於「頁面片段復用」(如動態載入 UserControl 的替代方案)。

客戶端導航 (Response.Write 注入 JavaScript)

代碼行為URL視窗
window.open('url')新視窗/分頁新視窗顯示新 URL原視窗保留
window.location='url'當前視窗跳轉變為新 URL原視窗替換
window.showModalDialog('url')模態對話框 (IE/Edge 舊版)對話框獨立**鎖定父視窗** 直到關閉
window.showModelessDialog('url')非模態對話框 (IE/Edge 舊版)對話框獨立父視窗可切換焦點

⚠️ showModalDialog/ModelessDialog **已被現代瀏覽器棄用**(Chrome/Firefox/Edge 新版不支援),建議改用 window.open + CSS/JS 模擬模態。

對話框超連結不彈新視窗技巧

在被開啟頁面 `` 區加入:

<base target="_self">

強制所有連結在當前框架/視窗開啟。

選型建議

  • **跨應用/登入跳轉/錯誤頁** → Response.Redirect
  • **同應用多步驟流程/隱藏真實路徑** → Server.Transfer (注意 MAC)
  • **頁面片段動態合成/元件化渲染** → Server.Execute (注意 MAC)
  • **需新視窗/分頁** → window.open
  • **純客戶端跳轉/單頁應用路由** → window.location

理解機制差異,避免 ViewState MAC 錯誤、雙重請求浪費、URL 洩露等常見坑點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved