日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

asp.net防止刷新时重复提交

發布時間:2025/7/14 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asp.net防止刷新时重复提交 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前段時間遇到了需要禁用刷新的需求,f5按鈕就不說了,簡單的js就能把它禁用,但是工具條上的刷新按鈕卻傻傻干不掉。

如果簡單的在刷新時重新加載畫面,通過window.location.href="url"可以很容易的實現,但是需求是要求在刷新時什么都不做,保留畫面的狀態,這下子可就復雜化了。

asp.net中分辨請求是重新請求還是通過刷新按鈕再次請求不是很方便,為了實現這個效果,試過了很多的方式,一下面的兩種為例

private bool pageRefreshed = false; //頁面是否刷新提交 private bool refreshState = false; //ViewState中暫存的狀態

然后重寫Page的LoadViewState與SaveViewState方法:

protected override void LoadViewState(object savedState) {object[] states = (object[])savedState;base.LoadViewState(states[0]);refreshState = (bool)states[1];if(Session["__PAGE_REFRESHED"] == null)pageRefreshed = false;elsepageRefreshed = refreshState != (bool)Session["__PAGE_REFRESHED"]; }protected override object SaveViewState() {Session["__PAGE_REFRESHED"] = !refreshState;object[] states = new object[2];states[0] = base.SaveViewState();states[1] = !refreshState;return states; } private void Button1_Click(object sender, EventArgs e) {if (pageRefreshed ){label.Text="this is refreshed function";} else {label.Text="this is new request function"; } }

這種方法雖然能夠實現,但是在某些請款下不適應。如果畫面上同時存在文本框和按鈕式,設置按鈕的autopostback="True"時,在修改完文本框的值,直接點擊按鈕(在文本框沒有失去焦點時,直接點擊按鈕),這時的執行順序是textchanged→textchanged→buttonclick,在第一次textchanged時,就把狀態已經變成了true,按鈕的不能執行。

2.codeproject找到了另外一種解決方法 原文地址:http://www.codeproject.com/Articles/18841/Refresh-Module

這種方式能夠準確的判斷是否是通過瀏覽器的刷新按鈕進行的請求,而且使用起來也非常簡單!

ddl位置:http://files.cnblogs.com/linyijia/RefreshModule.rar

1.引用dll,修改配置文件

在配置文件中添加modules

<system.web><httpModules><add name="RefreshModule" type="RefreshModule.Module, RefreshModule"/></httpModules> </system.web>

PS:wbapplication的情況下需要改成在system.webServer的modules的節點下追加modules

2.定義刷新時的行為

[Refresh()] public partial class Default : System.Web.UI.Page {protected void Page_Load(object sender, EventArgs e){if(IsPostBack && !RefereshHelper.IsPageRefreshed){// do some work with the submitted date }else{// do some work when the page is loaded with the GET method }} } protected void Btn_AllAudit_Click(object sender, EventArgs e){if (RefreshModule.RefreshHelper.IsPageRefreshed){ScriptManager.RegisterStartupScript(this, this.GetType(), "", "alert('請別重復提交頁面!');", true);return;}}

?PS:如果是win7 使用本地IIS運行 需要把網站對應的程序池? 基本設置里面 把集成模式 改成經典模式就可以了

轉載于:https://www.cnblogs.com/linyijia/p/3502149.html

總結

以上是生活随笔為你收集整理的asp.net防止刷新时重复提交的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。