关于页面刷新,事件重复提交的方法分享

浏览器的刷新是指重复上一次向服务器发送的请求,而asp.net的服务器控件的事件都是通过postback机制向服务器发送请求的。所以,当你点击提交按钮后再刷新,实际上是把提交按钮的postback请求又发送了一次。而asp.net应用服务器是无法区别这是正常点击按钮添加还是f5刷新添加(这涉及到页面生命周期。。。),那么这样就会导致在数据库里会存在n 条一模一样的数据。
在解决这个问题的过程中,尝试了一下几种方法:

(1)在事件提交后,将其中的参数置空,使得程序在执行过程中,因为没有参数而不会做业务处理。这种处理方法没有效果,因为服务器执行的是上一次请求的事件,事件提交后,改变参数没有任何意义。

(2)在事件提交后,将页面进行重定向到当前页面(Response.Redirect( "/basedata/PictureAdd.aspx" , true);)。因为每个页面都具有自己的生命周期,进行重定向后,即结束了当前页面操作。这种方法可行!

为什么在原Asp开发程序中不会碰到这样的问题呢?我觉得是因为Asp程序主要都是将表单提交给另外一个页面处理,并且,这个页面处理之后,将跳转到另外一个提示页面。那么在Asp程序中,只需要在回退时将页面设置为过期那么就可以有效的避免重复提交的问题。但是在Asp.Net中,基本上所有的操作都是基于事件操作,而事件的本质上就是页面自己提交给自己,并且页面无法识别提交时正常操作还是重复刷新。

(0)

相关推荐

  • firefox下jquery iframe刷新页面提示会导致重复之前动作

    刷新页面会提示 "要显示此页面, Firefox 必须发送将会导致重复之前动作的数据(例如搜索或者下订单)"看看以下代码 复制代码 代码如下: $("iframe").load(function(){ $(this).attr("src","about:blank"); }) 框架打开后设置地址到一个空页面就可以避免这个提示但有个问题 就是设置src后会触发load事件,会导致循环加载所以需要设置一个参数 等触发完正常事件后

  • Asp.Net防止刷新重复提交数据的办法

    在网上搜 一下,可以找到很多关于这方面的资料,其中有一篇是来自MSDN上的一种解决方法: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/BedrockASPNET.asp 它是通过重新定义 System.Web.UI.Page 类来实现加载页面时,是"刷新"."后退"请求,还是正常请求,其他的页面则继承了自定义的这 个Page类.感觉他这个方法比较独特,有例子

  • php环境下利用session防止页面重复刷新的具体实现

    b.php的代码 复制代码 代码如下: <?php //只能通过post方式访问 if ($_SERVER['REQUEST_METHOD'] == 'GET') {header('HTTP/1.1 404 Not Found'); die('亲,页面不存在');} session_start(); $fs1=$_POST['a']; $fs2=$_POST['b']; //防刷新时间,单位为秒 $allowTime = 30; //读取访客ip,以便于针对ip限制刷新 /*获取真实ip开始*/

  • android中ListView多次刷新重复执行getView的解决方法

    以前倒是没有注意listview的getView会重复执行多次,这次因为布局比较复杂,所以在测试的时候去断点跟踪,发现同一条数据不断的重复执行.觉得很奇怪,于是上网搜索了一下.网上的解释基本一致,就是ListView布局时height和width都不是fill_parent,导致不断计算高度,不断刷新.或者说它的父容器没有设置成fill_parent. 可以布局太复杂的情况下,全部按照fill_parent去调整不现实.所以想了另一种方案,就是动态固定高度. 在程序运行后,固定ListView的

  • javascript下阻止表单重复提交、防刷新、防后退

    1 服务器端的解决方法.这是我最为推荐的方法.优点是判断准确,兼容性最大. 做法:a页面显示表单,然后提交b页面处理,处理完后重定向到c页面显示结果. 1.0 在访问a页面时在session里生成一个标志ID,例如 //伪代码  session("submitID")=random()  然后把这个值写到表单的一个hidden的input里 //伪代码  <%response.write("<input name=submitID2 type=hidden val

  • 十分钟内学会 避免用户刷新导致重复POST提交

    Question 在Web应用中,采用POST提交信息是非常常见的,然而如果目标页面打开得太慢,用户就可能会刷新页面,这时候之前已经提交过的信息就会被重复提交.即使用户成功打开了POST提交目标页,之后他通过链接导航到别处了,再退回到POST提交目标页时仍可能会重复提交页面(例如因为浏览器缓存已失效).而且,只要碰到重复POST提交的场景,浏览器就会问用户是否确认重做此操作,用户并不一定能正确理解重做意味着重做什么,浏览器又不允许网站向用户解释清楚,所以这属于非常不友善的设计.那么我们应该如何避

  • JSP刷新页面表单重复提交问题解决办法分享

    使用sessionID和时间戳作为标识,关键代码如下: 复制代码 代码如下: public class SswpdjAction extends BaseAction{     public String execute(){     /**业务代码**/     ................     //设置标识     this.setSessionToken();     //转到添加页面     return "toAdd";     }     public String

  • asp.net 处理F5刷新页面重复提交页面的一个思路

    当提交完一个页面后,如果我们再次点击F5刷新该页面的话,会弹出一个提示,提示我们如果继续,则会重新发送提交我们刚才提交的内容,要是类似付款或一次性的操作,我们不应该这样操作,否则会造成重复提交的问题.解决这个问题,我们可以通过如下思路来处理: 1. 提交成功后,将一个成功状态存入session中,然后重新载入该页面. 2. 在page_load方法中,判定该session字段的状态值,如果为成功,则显示成功信息,否则显示错误提示,紧跟着通过Session.Remove()方法来清空该缓存即可.

  • javaweb用户注销后点击浏览器返回刷新页面重复登录问题的解决方法

    最近在写一个购书网站,测试注销功能时点击浏览器返回刷新浏览器,会发现原本已经注销的用户又重新登录了 想了很久在网上也找了很多办法,不过网上给出的办法大多是用js实现注销后禁止用户点击游览器返回 这个办法虽然可行,但并不是在后台真正的解决这个问题,有一种防君子不防小人的感觉 下面把自己实现的方法记录下来 原理: 注销后点击浏览器返回刷新浏览器其实就是浏览器将原来form表单的信息重新发送了一遍 注销也就是干掉原来的session // 注销 private void logout(HttpServ

  • asp.net防止刷新时重复提交(可禁用工具条刷新按钮)

    前段时间遇到了需要禁用刷新的需求,f5按钮就不说了,简单的js就能把它禁用,但是工具条上的刷新按钮却傻傻干不掉. 如果简单的在刷新时重新加载画面,通过window.location.href="url"可以很容易的实现,但是需求是要求在刷新时什么都不做,保留画面的状态,这下子可就复杂化了. asp.net中分辨请求是重新请求还是通过刷新按钮再次请求不是很方便,为了实现这个效果,试过了很多的方式,一下面的两种为例 1. 复制代码 代码如下: private bool pageRefres

随机推荐