ASP.NET後台代碼方式識別頁面“按鈕點擊”和瀏覽器F5“重新整理”事件

來源:互聯網
上載者:User

    最近有一些朋友向我諮詢有關頁面重新整理與按鈕的事情,簡單的說就是當按鈕事件發生後,使用者又按“F5”或重新整理按鈕重新整理了頁面,這樣按鈕中的事件就會重複執行,這不是我們希望看到的。

    以前也有一些解決方案,其中有些是Javascript完成的,有些是後台程式碼完成的。前者不是今天討論重點,今天主要向大家介紹一種C#完成的“重新整理”監控方法,當使用者使用“F5”或瀏覽器的[重新整理] 按鈕時,代碼就會檢測到,並以bool值方式返回。這是從以前一個老大的類庫中分離出來的,老大的名字忘了。。。,去掉了無關的內容,只保留檢測重新整理的模組,這樣乾淨些。

  “重新整理”是怎麼回事?

    重新整理是通過瀏覽器重複向伺服器提交最新請求來完成的,當使用者點擊某個按鈕後,瀏覽器會將按鈕狀態量緩衝,這時如果使用者再使用“重新整理”功能,瀏覽器就會機械的提交包含按鈕狀態量的“最新請求”,而瀏覽器不會為“重新整理”事件提供任何通知(事實上,瀏覽器只對“轉到”事件提供了通知),所以伺服器端無法區分重新整理與一般提交事件,這樣伺服器在收到請求後,自然會重複執行按鈕事件了。

    識別“重新整理”原理:

    使用一個上下文唯一的票據號,該票據號隨頁面提交或回傳而遞增,每當使用者與伺服器端互動時,代碼會提取上次的票據號碼並與當前票據號碼比較,如果當前票據大於上次的票據,則是提交或回傳,否則則識別為重新整理。

    這種方式會用到HttpMoudel,並在其中操作Session。

    使用方法:

  1. 引入dll

        http://files.cnblogs.com/isline/MsdnExt.rar

   2.修改web.config,在<httpModules> </httpModules>添加以下item:

       <add name="MsdnModule" type="Msdn.RefreshModule, MsdnExt"/>

       其中“MsdnModule”是一個名字, “Msdn.RefreshModule”是“Msdn”下的“RefreshModule”類型,“MsdnExt”是程式集的名字

   3.引入命名空間 using Msdn; 並修改頁面類繼承Msdn.Page

   4.使用代碼

代碼

protected void Button1_Click(object sender, EventArgs e)

{

if (!IsPageRefresh)

Response.Write("按鈕事件");

else

Response.Write("頁面重新整理");



TrackRefreshState();

}

 

   原始碼下載:

    http://files.cnblogs.com/isline/Refresh.rar

  注意:

  該方法最好在按鈕事件對應的方法中使用,否則可能會失效。

 

  我是李鳴(Aicken) 歡迎您關注我的下一篇文章。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.