求问,关于asp.net页面,点击按钮提交一次后,刷新会导致浏览器弹出提示窗口且会重复提交的问题

kuangtuxue 2013-09-26 07:33:11
首先,在asp.net里,只要引起了页面回传(无论是点击按钮或者dropdownlist的SelectedIndexChanged)之后(回传完成之后)。接着再按f5刷新页面就会让浏览器弹出提示窗口(除了Opera好像不会弹出),例如火狐的:


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

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

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



PS:禁用缓存这个方法的话,我试了一下代码,没用。
...全文
477 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kuangtuxue 2013-09-28
  • 打赏
  • 举报
回复
引用 6 楼 findcaiyzh 的回复:
[quote=引用 3 楼 kuangtuxue 的回复:] [quote=引用 1 楼 jshi123 的回复:] 没有好办法。除了Post/Redirect/Get方式外就是把Postback改成ajax。 你说的“在不重定向的情况下(也就是本页数据不能被清空)”,这个问题不存在。 Postback后Redirect到本页,本页仍然可以向用户呈现用户刚才提交的数据。 在MVC中甚至有TempData可以很方便地记住临时数据,供redirect过来的请求取用,在webform中模仿来做一个也不难。
重定向之后,控件的状态保存不了的吧?我才做了实验,在按钮的点击事件的最后一行这样写:Response.Redirect(Request.Url.ToString()); 我在textbox里输入的字符没有了。(当然没有了,都重定向了……) [/quote] Redirect是修改模式为Update, 而不是Insert. [/quote] “Redirect是修改模式为Update, 而不是Insert”,对不起,我没看懂你说的是什么意思
jshi123 2013-09-27
  • 打赏
  • 举报
回复
或者楼主google下:Post/Redirect/Get模式,PRG已经成为一种标准模式:系统中应有一个类似ViewModel的对象,代表界面上应该呈现一些什么数据,Post对这个Model进行改变,然后Redirect/Get重新呈现出这个Model。
jshi123 2013-09-27
  • 打赏
  • 举报
回复
引用 3 楼 kuangtuxue 的回复:
重定向之后,控件的状态保存不了的吧?我才做了实验,在按钮的点击事件的最后一行这样写:Response.Redirect(Request.Url.ToString()); 我在textbox里输入的字符没有了。(当然没有了,都重定向了……
我的意思需要自己做些处理才会保存住状态。 比如,redirect之前: Session["TempData"] = textbox.Text; Redirect(Request.Url); 然后在Page_Load中: if (!IsPostBack && Session["TempData"] != null) { textbox1.Text = Session["TempData"] Session["TempData"]=null; }
寒似火 2013-09-27
  • 打赏
  • 举报
回复
楼主改成用ajax做吧 服务器控件好像一直有这个问题
踏平扶桑 2013-09-27
  • 打赏
  • 举报
回复
dropdownlist的做成ajax的吧。 要不然肯定会引起重复提交的情况。
宝_爸 2013-09-27
  • 打赏
  • 举报
回复
引用 3 楼 kuangtuxue 的回复:
[quote=引用 1 楼 jshi123 的回复:] 没有好办法。除了Post/Redirect/Get方式外就是把Postback改成ajax。 你说的“在不重定向的情况下(也就是本页数据不能被清空)”,这个问题不存在。 Postback后Redirect到本页,本页仍然可以向用户呈现用户刚才提交的数据。 在MVC中甚至有TempData可以很方便地记住临时数据,供redirect过来的请求取用,在webform中模仿来做一个也不难。
重定向之后,控件的状态保存不了的吧?我才做了实验,在按钮的点击事件的最后一行这样写:Response.Redirect(Request.Url.ToString()); 我在textbox里输入的字符没有了。(当然没有了,都重定向了……) [/quote] Redirect是修改模式为Update, 而不是Insert.
宝_爸 2013-09-27
  • 打赏
  • 举报
回复
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
netafter 2013-09-27
  • 打赏
  • 举报
回复
可以设置过期的,禁止重复提交设置页面的一个值就可以
kuangtuxue 2013-09-27
  • 打赏
  • 举报
回复
引用 1 楼 jshi123 的回复:
没有好办法。除了Post/Redirect/Get方式外就是把Postback改成ajax。 你说的“在不重定向的情况下(也就是本页数据不能被清空)”,这个问题不存在。 Postback后Redirect到本页,本页仍然可以向用户呈现用户刚才提交的数据。 在MVC中甚至有TempData可以很方便地记住临时数据,供redirect过来的请求取用,在webform中模仿来做一个也不难。
重定向之后,控件的状态保存不了的吧?我才做了实验,在按钮的点击事件的最后一行这样写:Response.Redirect(Request.Url.ToString()); 我在textbox里输入的字符没有了。(当然没有了,都重定向了……
Andy__Huang 2013-09-26
  • 打赏
  • 举报
回复
再按F5刷新,怎么能防止刚才的按钮事件重新运行? http://bbs.csdn.net/topics/80287994
jshi123 2013-09-26
  • 打赏
  • 举报
回复
没有好办法。除了Post/Redirect/Get方式外就是把Postback改成ajax。 你说的“在不重定向的情况下(也就是本页数据不能被清空)”,这个问题不存在。 Postback后Redirect到本页,本页仍然可以向用户呈现用户刚才提交的数据。 在MVC中甚至有TempData可以很方便地记住临时数据,供redirect过来的请求取用,在webform中模仿来做一个也不难。

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧