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防止刷新时重复提交的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SqlServer2005高效分页sql
- 下一篇: get 和post 方式请求数据