asp.net防止刷新重复提交数据解决方法的分析

在Asp.net开发中,浏览器刷新重复触发事件,导致重复提交的问题,下面有几种解决方法,我针对适用情况和利弊做一个简单的分析。

方法一:检测数据表,看是否有相同的数据。这种方法对插入数据可能意义更大些,不过如何定义是相同的数据,是个麻烦的事。同时,如果不是插入数据,是删除呢,就不适用了。

方法二:提交后,转向一个过渡页面,然后再从过渡页面返回到当前的页面。这就要求在提交后,要把当前页面的URL地址作为参数传过去,同时不能保存缓存,否则“后退”带来不良后果。不过,如果是简单的删除,似乎转来转去太麻烦了。

方法三:用JavaScript捕捉F5事件。比如有如下代码
window.document.onkeydown = KeyStroke;
function KeyStroke()
  {
   var key = event.keyCode;
   event.srcElement.releaseCapture();
   if(key == 116)
   {
   event.keyCode=0;
   event.returnValue=false;
   }
  } 
似乎不错,禁用了F5,不过如果浏览器禁用了js咋办,如果用右键来刷新咋办?禁用右键么?不能为了实现一个功能来禁用这禁用那的,不合情理。

方法四:基于session和ViewState来处理。最好的例子见:http://www.csharpwin.com/dotnetspace/2758.shtml。这个方法的原理是”在页面代码执行的末尾将当前的ViewState写到一个Session中,而在页面加载时则判断该Session值是否与当前ViewState相等(其实Session值恰好是ViewState的前一状态),若不等,则是正常的postback,若是相等则是浏览器刷新”.这个方法还不错,不过对session占用如此多的服务器资源,我有些担心。

方法五:用ajax提交操作。当然,这是从源头上就没有刷新的问题,因为postback都没有了,不存在防止刷新提交问题。有些偏题。

方法六:通过 HttpContext 对象传递给页面处理。这个方法是msdn给的一个方法,原理我就不赘述了,详见http://msdn.microsoft.com/zh-cn/library/ms379557(VS.80).aspx。我觉得这个方法不错,根据asp.net的运行机制来处理此问题,就比较游刃有余了。所以这个方法我推荐使用,虽然是msdn的这篇文章是2004年的老文了,现在看来依然很不错。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值