我有一个web forms web应用程序(asp.net 2.0)。当用户提交表单时,提交链接实际上消失了,因此他们不能再次提交表单。但是,他们可能会按下F5,这会导致对数据库的另一次插入,这是我不希望发生的事情。
当他们按下F5告诉页面不要再提交时,有没有我可以设置的设置?
发布于 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。
发布于 2010-03-27 07:16:51
你可以试试这个。如果它不能满足您的需求,那么至少了解它是一件好事。
Post - Redirect - Get
发布于 2010-03-27 04:40:31
你可以做几件事。将布尔值存储在ViewState中。检查/设置该属性。将布尔值存储在会话中并检查/设置它。
在回发时,设置该值,如果该值为true,则阻止提交并引发/显示错误。
https://stackoverflow.com/questions/2526568
复制相似问题