本文是翻譯貼, 原文參見Detecting browser 'Refresh' from Code behind in C#
瀏覽器的"刷新"常會(huì)導(dǎo)致問(wèn)題, 特別是當(dāng)頁(yè)面和數(shù)據(jù)庫(kù)有交互的時(shí)候, 結(jié)果可能更糟. 因?yàn)? 每次頁(yè)面刷新, 如果沒有經(jīng)過(guò)代碼處理, 就會(huì)重復(fù)做一次數(shù)據(jù)庫(kù)操作.
這就可能導(dǎo)致數(shù)據(jù)的不一致, 甚至程序掛掉.
檢測(cè)"刷新"的一種方法就是用javaScript禁用掉F5和右擊事件. 但就算這么做了, 終端用戶還是有N種其它方法來(lái)刷新頁(yè)面的, 比如, Ctrl+R.
最好的防止"刷新"是代碼被重復(fù)調(diào)用的方法還是在服務(wù)器端做檢查, 并經(jīng)行處理.
下面的代碼放在page_load方法中, 它可以檢測(cè)"刷新":
bool IsPageRefresh = false;//this section of code checks if the page postback is due to genuine submit by user or by 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();}
(譯注: 它是怎么工作的? 自己試試看吧 -- 有時(shí)候當(dāng)搞清楚了問(wèn)題本身, 解決問(wèn)題的方法也就有了)
之后, 就可以在后臺(tái)代碼中用"IsPageRefresh"來(lái)判斷一個(gè)PostBack是來(lái)自用戶點(diǎn)擊按鈕還是瀏覽器的"刷新"啦.
希望對(duì)你有所幫助!
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注