防止刷新重复提交数据解决方法的分析
2008-07-12 01:47
856 查看
在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://cncxz.cnblogs.com/archive/2005/12/25/304141.html。这个方法的原理是"在页面代码执行的末尾将当前的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年的老文了,现在看来依然很不错。
如果你觉得有其他更好的方法,不妨告诉我! :-)
本文首发地址:http://www.watch-life.net/aspnet/refresh-no-resubmit.html
更多文章见:守望轩[http://www.watch-life.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://cncxz.cnblogs.com/archive/2005/12/25/304141.html。这个方法的原理是"在页面代码执行的末尾将当前的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年的老文了,现在看来依然很不错。
如果你觉得有其他更好的方法,不妨告诉我! :-)
本文首发地址:http://www.watch-life.net/aspnet/refresh-no-resubmit.html
更多文章见:守望轩[http://www.watch-life.net/]
相关文章推荐
- 防止刷新重复提交数据解决方法的分析
- 防止刷新重复提交数据解决方法的分析
- asp.net防止刷新重复提交数据解决方法的分析
- 用一个最简单方法解决asp.net页面刷新导致数据的重复提交
- 解决刷新页面造成数据重复提交的方法(转载)
- JSP页面刷新重复提交数据解决方法总结(已验,可行)
- 网页如何防止刷新重复提交与如何防止后退的解决方法
- 网页如何防止刷新重复提交与如何防止后退的解决方法
- 网页如何防止刷新重复提交与如何防止后退的解决方法
- 网页如何防止刷新重复提交与如何防止后退的解决方法
- 网页如何防止刷新重复提交与如何防止后退的解决方法
- 整理的几个防止刷新后退重复提交数据的方法
- .net中防止刷新页面重复提交数据的几种方法
- JSP防止网页刷新重复提交数据的几种方法
- Asp.Net防止刷新重复提交数据小记
- 怎样防止浏览器刷新重复提交数据(F5,右键刷新)
- js中防止连续点击按钮导致多次重复提交数据的方法
- spring mvc 通过redirect重定向防止刷新页面重复提交又能返回数据给前台页面
- 解决刷新页面造成的数据重复提交问题
- (转载)Asp.Net防止刷新重复提交数据小记