当前位置:  开发笔记 > 后端 > 正文

asp.net阻止表单提交两次

如何解决《asp.net阻止表单提交两次》经验,为你挑选了2个好方法。

我有一个Web表单Web应用程序(asp.net 2.0).当用户提交表单时,我的提交链接实际上已经消失,因此他们无法再次提交.但是,他们可以按F5,这会导致另一个插入数据库,我不希望发生这种情况.

是否存在某种设置,如果/当他们按F5告诉页面时我可以设置 - 不再提交?



1> John Rasch..:

听起来你正在对同一页面进行回发,然后在将同一页面重新显示给用户之前插入数据库,减去提交按钮?

如果是这种情况,解决问题的最简单方法是对Response.Redirect()同一页面执行操作 - 因此当用户按下F5时,它会将GET请求重新加载到页面而不是POST.

说明:

当您在ASP.NET中进行回发时,浏览器将向服务器发送POST请求.我不知道你在HTTP方法中的背景,但即使你是网络编程的新手,你也可能在浏览器中体验过这些类型的请求的影响.有时,当您在网站上提交表单并点击后退按钮时,会说"您想重新提交表单数据".这是因为这些表单使用HTTP POST方法将数据发送到服务器.在这种情况下后退按钮的效果与按F5时相同 - 浏览器重复完全相同的POST请求(这需要某种类型的表单数据,在这些情况下,它与您最后提交的数据相同时间).

使用时Response.Redirect(),服务器将响应请求发出HTTP状态代码302(临时移动资源).然后,浏览器将发出GET请求,告知其已被告知要重定向到的资源(在这种情况下,您的确切页面相同).

现在,当您在页面上时,它会被返回,就像您从链接访问它或直接将其键入地址栏一样.如果您这次按F5,将发出GET请求而不是POST.

我建议你下载Firebug并激活"Net"面板.您可以准确地查看组成请求/响应的内容以及页面上所有请求的列表.

更多资源:

如果你喜欢冒险,你可以查看更多的状态代码(以及我在一个应用程序中实际使用418的方式,我正在努力解决ASP.NET的Forms身份验证问题).

如果Firebug还不够,你可以下载Fiddler并实际手工和重播你喜欢的请求.

如果GET和POST不够,您可以使用其他方法更改应用程序中的状态.您可能听说过RESTful架构,它基本上使用HTTP方法GET,PUT,POST和DELETE.



2> Steve..:

你可以试试这个.如果它不符合您的需求,至少可以了解它.

后重定向 - 获取

http://en.wikipedia.org/wiki/Post/Redirect/Get

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有