首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >asp.net阻止表单提交两次

问asp.net阻止表单提交两次
EN

Stack Overflow用户
提问于 2010-03-27 04:37:01
回答 4查看 16.7K关注 0票数 8

我有一个web forms web应用程序(asp.net 2.0)。当用户提交表单时,提交链接实际上消失了,因此他们不能再次提交表单。但是,他们可能会按下F5,这会导致对数据库的另一次插入,这是我不希望发生的事情。

当他们按下F5告诉页面不要再提交时,有没有我可以设置的设置?

EN

回答 4

Stack Overflow用户

发布于 2010-03-27 05:15:54

这听起来像是在回发到同一页,然后插入到数据库,然后再向用户重新显示同一页,去掉了提交按钮?

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

解释:

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

当您使用Response.Redirect()时,服务器会发出HTTP status code 302 (资源临时移动)来响应请求。然后,浏览器将发出一个GET请求,请求它被告知要重定向到的资源(在本例中,就是与您完全相同的页面)。

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

我建议你使用download Firebug并激活"Net“面板。您可以查看请求/响应的确切构成,以及页面上正在进行的所有请求的列表。

更多资源:

如果您喜欢冒险,可以查看even more status codes (顺便说一句,我在一个应用程序中实际使用了418,我正在开发一个应用程序来规避针对ASP.NET的表单身份验证)。

如果Firebug还不够,您可以下载Fiddler,并根据自己的喜好手工处理和重放请求。

如果GET和POST不能满足您的需求,您可以使用其他方法来更改应用程序中的状态。您可能听说过RESTful architecture,它基本上按照预期使用了HTTP方法GET、PUT、POST和DELETE。

票数 14
EN

Stack Overflow用户

发布于 2010-03-27 07:16:51

你可以试试这个。如果它不能满足您的需求,那么至少了解它是一件好事。

Post - Redirect - Get

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

票数 5
EN

Stack Overflow用户

发布于 2010-03-27 04:40:31

你可以做几件事。将布尔值存储在ViewState中。检查/设置该属性。将布尔值存储在会话中并检查/设置它。

在回发时,设置该值,如果该值为true,则阻止提交并引发/显示错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2526568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档