本文是翻譯貼, 原文參見Detecting browser 'Refresh' from Code behind in C#
瀏覽器的"刷新"常會導致問題, 特別是當頁面和數據庫有交互的時候, 結果可能更糟. 因為, 每次頁面刷新, 如果沒有經過代碼處理, 就會重復做一次數據庫操作.
這就可能導致數據的不一致, 甚至程序掛掉.
檢測"刷新"的一種方法就是用JavaScript禁用掉F5和右擊事件. 但就算這么做了, 終端用戶還是有N種其它方法來刷新頁面的, 比如, Ctrl+R.
最好的防止"刷新"是代碼被重復調用的方法還是在服務器端做檢查, 並經行處理.
下面的代碼放在page_load方法中, 它可以檢測"刷新":
bool IsPageRefresh = false; //this section of code checks if the page postback is due to genuine submit by user or by pressing "refresh" if (!IsPostBack) { ViewState["ViewStateId"] = System.Guid.NewGuid().ToString(); Session["SessionId"] = ViewState["ViewStateId"].ToString(); } else { if (ViewState["ViewStateId"].ToString() != Session["SessionId"].ToString()) { IsPageRefresh = true; } Session["SessionId"] = System.Guid.NewGuid().ToString(); ViewState["ViewStateId"] = Session["SessionId"].ToString(); }
(譯注: 它是怎么工作的? 自己試試看吧 -- 有時候當搞清楚了問題本身, 解決問題的方法也就有了)
之后, 就可以在后台代碼中用"IsPageRefresh"來判斷一個PostBack是來自用戶點擊按鈕還是瀏覽器的"刷新"啦.
希望對你有所幫助!