ASP.NET 提供多種頁面導航機制,各有適用場景與副作用。本文系統對比 **伺服器端** 與 **客戶端** 七大方式,含 URL 變化、資料傳遞、驗證機制、效能差異。
| 方法 | 跨伺服器 | URL 變化 | 表單/查詢字串傳遞 | ViewState MAC 問題 | 典型場景 |
|---|---|---|---|---|---|
Response.RedirectResponse.Redirect("url", false) | ✅ | ✅ 變為新 URL | ❌ 預設不傳遞true 可保留 | 無 | 跨站導航、登入後跳轉、錯誤頁 |
Server.TransferServer.Transfer("page.aspx", true) | ❌ 同一應用 | ❌ 保持原 URL | ✅ true 保留 | ⚠️ 目標頁需 EnableViewStateMac="false" | 多步驟精靈、內部流程跳轉、隱藏實際路徑 |
Server.ExecuteServer.Execute("page.aspx") | ❌ 同一應用 | ❌ 保持原 URL | ✅ 自動共享 | ⚠️ 目標頁需 EnableViewStateMac="false" | 元件化頁面片段、動態包含、報表區塊 |
endResponse=false (預設 true) 允許後續代碼繼續執行。preserveForm=true 保留表單集合與查詢字串。EnableViewStateMac="false"**。| 代碼 | 行為 | 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.RedirectServer.Transfer (注意 MAC)Server.Execute (注意 MAC)window.openwindow.location理解機制差異,避免 ViewState MAC 錯誤、雙重請求浪費、URL 洩露等常見坑點。