asp.net防止刷新重复提交的方法与代码
asp.net防止页面刷新与重复提交,即要禁止F5按钮的刷新功能,又要禁止IE工具栏上的刷新,说起来容易,实现起来可不简单。
本文提供二个实例代码,供大家学习参考。
例1,
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; else pageRefreshed = 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,
原文地址:http://www.codeproject.com/Articles/18841/Refresh-Module
这种方式可以准确的判断是否是通过浏览器的刷新按钮进行的请求,使用也很简单,值得推荐。
1.引用dll,修改配置文件
在配置文件中添加modules
<system.web> <httpModules> <add name="RefreshModule" type="RefreshModule.Module, RefreshModule"/> </httpModules> </system.web>
wbapplication的情况下需要改成在system.webServer的modules的节点下追加modules
2.定义刷新时的行为
RefereshHelper.IsPageRefreshed这个参数就是用来判断是否是通过浏览器的书刷新按钮进行的请求。
其他的行为行为控制参照原文。
建议采用第二种方式,简单直观,希望本文提供的方法,对大家在防止页面重复提交方面有所帮助。
您可能感兴趣的文章:
asp.net防止后退与重复提交表单的简单方法
asp.net防止页面刷新重复提交的代码
asp.net防止刷新重复提交的方法与代码
Asp.net弹出窗口同时防止刷新重复提交的方法
php防止表单重复提交的小例子
php防止刷新页面重复提交的代码一例
Asp.net防止后退、刷新重复提交的方法
Asp.net防刷新重复提交与防后退的方法
php cc攻击防御与防快速刷新代码
c#.net防止按F5刷新页面重复提交的方法