在 ASP.NET WebForms 中,按鈕點擊觸發 PostBack 後,頁面實際上已「重新整理」一次。若在伺服器端註冊 history.go(-1),瀏覽器歷史記錄會包含 PostBack 後的頁面,導致返回上一頁實際返回「PostBack 前的同一頁」,使用者感覺無反應。需用 history.go(-2) 跳過 PostBack 頁面。
// 方式 1:ClientScriptManager(建議)
ClientScript.RegisterStartupScript(GetType(), "BackScript", "history.go(-2);", true);
// 方式 2:ScriptManager(AJAX 環境)
ScriptManager.RegisterStartupScript(this, GetType(), "BackScript", "history.go(-2);", true);
// 方式 3:Response.Write(不建議,易破壞頁面結構)
Response.Write("");
history.go(-1) 返回 B(PostBack前) → 畫面看似未變。history.go(-2) 直接返回 A。若不想依賴歷史記錄計算,可在按鈕 OnClientClick 直接呼叫:
或使用 window.location.href = document.referrer;(需注意 referrer 可能為空)。
history.go 依賴瀏覽器歷史堆疊,若使用者透過書籤、直接輸入網址進入,返回行為不可預期。-1 即可。WebForms PostBack 機制導致歷史記錄多一筆,返回上一頁需用 history.go(-2)。建議改用 ClientScript.RegisterStartupScript 註冊腳本,並評估是否適合改用前端導航或現代框架路由。