在asp.net开发的过程中,大家可能遇到过这样的一个问题,我新建了2个页面,一个是用来添加数据的页面(比如说发表文章) 的页面,假设为Add.aspx,当我们数据录入完毕后,要进行提交,我们让页面提交成功后返回页面Manage.aspx,这是一个简单的过程,涉及到跳转的问题,假设我跳转是用response.redirect或者javascript脚本location.href实现的。这样的话,我们会发现从add.aspx跳转到Manage.aspx后,浏览器的后退按钮是激活的,也就是说用户可以通过点击后退按钮跳转回去add.aspx页面,这时候,如果浏览器帮我们缓存了该页面,也就是add.aspx刚才的提交动作被缓存了,后退的话,该动作会再执行一次,这样导致了重复提交。
我一般的解决方法:
方法一:脚本
一个是Javascript跳转Response.write("<script language='javascript'>location.reload('manage.aspx');</script>");利用location.reload来实现这样就不会在浏览器的历史记录中留下痕迹,也就不会有该问题了。缺点:部分测试Firefox浏览器中不起作用。
方法二:meta标签
<meta http-equiv="CACHE-CONTROL" content="NO-CACHE" />
缺点:也只有IE浏览器通过。
方法三:服务器跳转
使用Server.transer("manage.aspx");
缺点:资源没有完全释放(如:add.aspx中定义了变量,在manage中还可以继续使用,如果manage中不用add.aspx中的资源情况下就浪费了)
方法四:response控制
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1))
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.Cache.SetNoStore()
浙公网安备 33010602011771号