ASP.NET WebForm 檢測頁面刷新(Refresh)


本文是翻譯貼, 原文參見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是來自用戶點擊按鈕還是瀏覽器的"刷新"啦.

希望對你有所幫助!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM