日期:2014-05-17  浏览次数:20535 次

求问,关于asp.net页面,点击按钮提交一次后,刷新会导致浏览器弹出提示窗口且会重复提交的问题
本帖最后由 kuangtuxue 于 2013-09-26 19:39:13 编辑
首先,在asp.net里,只要引起了页面回传(无论是点击按钮或者dropdownlist的SelectedIndexChanged)之后(回传完成之后)。接着再按f5刷新页面就会让浏览器弹出提示窗口(除了Opera好像不会弹出),例如火狐的:


点击重新发送的话,就会重新提交上一次提交的数据。

网上的解决方法我查了不少,但是能完全解决问题的我没查到。因为确实有些方法可以在重新发送数据的时候判断出是不是刷新导致的重复提交而进行处理,但是那也是在重新发送数据之后的事情了,也就是浏览器还是会弹出提示窗口。不能消除掉提示窗口,用户使用起来极端的不方便,其余的几乎就没啥意义了。

那么,在不重定向的情况下(也就是本页数据不能被清空),有哪些解决方式可以让浏览器直接不弹出提示窗口?(当然也不能重复提交数据了)



PS:禁用缓存这个方法的话,我试了一下代码,没用。
asp.net

------解决方案--------------------
没有好办法。除了Post/Redirect/Get方式外就是把Postback改成ajax。

你说的“在不重定向的情况下(也就是本页数据不能被清空)”,这个问题不存在。
Postback后Redirect到本页,本页仍然可以向用户呈现用户刚才提交的数据。
在MVC中甚至有TempData可以很方便地记住临时数据,供redirect过来的请求取用,在webform中模仿来做一个也不难。
------解决方案--------------------
lz看看这个讨论有没有帮助:
How to avoid duplicate entry from asp.net on Postback?
http://stackoverflow.com/questions/11511481/how-to-avoid-duplicate-entry-from-asp-net-on-postback
------解决方案--------------------
引用:
Quote: 引用:

没有好办法。除了Post/Redirect/Get方式外就是把Postback改成ajax。

你说的“在不重定向的情况下(也就是本页数据不能被清空)”,这个问题不存在。
Postback后Redirect到本页,本页仍然可以向用户呈现用户刚才提交的数据。
在MVC中甚至有TempData可以很方便地记住临时数据,供redirect过来的请求取用,在webform中模仿来做一个也不难。


重定向之后,控件的状态保存不了的吧?我才做了实验,在按钮的点击事件的最后一行这样写:Response.Redirect(Request.Url.ToString());
我在textbox里输入的字符没有了。(当然没有了,都重定向了……


Redirect是修改模式为Update, 而不是Insert. 
------解决方案--------------------
dropdownlist的做成ajax的吧。
要不然肯定会引起重复提交的情况。
------解决方案--------------------
楼主改成用ajax做吧 服务器控件好像一直有这个问题
------解决方案--------------------
或者楼主google下:Post/Redirect/Get模式,PRG已经成为一种标准模式:系统中应有一个类似ViewModel的对象,代表界面上应该呈现一些什么数据,Post对这个Model进行改变,然后Redirect/Get重新呈现出这个Model。