asp.net防止刷新时重复提交
来源:互联网 发布:java与或运算 编辑:程序博客网 时间:2024/04/30 04:25
如果简单的在刷新时重新加载画面,通过window.location.href="url"可以很容易的实现,但是需求是要求在刷新时什么都不做,保留画面的状态,这可就复杂化了。
asp.net中分辨请求是重新请求还是通过刷新按钮再次请求不是很方便,为了实现这个效果,试过了很多的方式,一下面的两种为例
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.codeproject找到了另外一种解决方法 原文地址:http://www.codeproject.com/Articles/18841/Refresh-Module
这种方式能够准确的判断是否是通过浏览器的刷新按钮进行的请求,而且使用起来也非常简单!
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 } }}
RefereshHelper.IsPageRefreshed这个参数就是用来判断是否是通过浏览器的书刷新按钮进行的请求。其他的行为行为控制参照原文。PS:codeproject真是个不过的地方,很多问题都是通过它来解决的
其他的方式不一一列举,列举的第二种方式可以说简单易用,所有的实现都已经为我们封装好了,只需要简单的调用。
- asp.net防止刷新时重复提交
- Asp.Net防止刷新重复提交数据
- Asp.Net防止刷新重复提交数据
- Asp.Net防止刷新重复提交数据
- Asp.Net防止刷新重复提交数据小记
- ASP.NET中防止刷新页面造成表单重复提交
- ASP.NET中防止刷新页面造成表单重复提交
- ASP.net关于防止刷新重复提交数据
- Asp.Net防止刷新重复提交数据小记
- (转载)Asp.Net防止刷新重复提交数据小记
- Asp.Net防止刷新重复提交数据小记
- asp.net防止刷新重复提交数据解决方法的分析
- Asp.Net防止刷新重复提交数据小记
- asp.net防止页面刷新或后退引起重复提交
- Asp.Net防止刷新重复提交数据小记
- ASP.NET中防止刷新页面造成表单重复提交
- asp.net \'防止刷新提交
- asp.net 防止重复提交
- 【一个按标志分拆字符串的好方法】strtok函数简介及应用。
- Tui 基于FlashCS6的cocos2d-x UI编辑器
- [LeetCode] Palindrome Number
- linux下几种不同的文件安装格式
- NSString去掉换行符和空白字符
- asp.net防止刷新时重复提交
- response.encodeURL的用法
- python网络编程1 半双工聊天
- CYQ.IIS 下载中心[ASP.NET 本地运行网站无需要安装IIS]
- 我们与江西外语外贸职业学院结为合作
- HDU 1273 漫步校园 orz
- 如何成为一名软件架构师?
- 蒙特卡罗积分(Scheme语言实现)
- 【转】“Insert into 语句的语法错误”的解决方法