asp.net:如何防止用户多次发布相同的数据

时间:2011-09-22 22:40:39

标签: c# javascript asp.net post submit

我有一个小的asp.net Web应用程序。

它是sql-server-2008数据库的前端。

在填写完所有数据后,他们将按提交,数据将被发送到数据库。

此后如果用户刷新页面,数据会再次发布!!!我如何禁止这种情况发生?

4 个答案:

答案 0 :(得分:4)

将位置标题发送回用户,将浏览器重定向到另一个页面:刷新然后重新加载其他页面,而不是重新提交旧表单。

答案 1 :(得分:2)

您需要遵循WikiPedia上解释的帖子/重定向/获取模式,并由Femi提及。在完成处理后的代码中,执行Response.Redirect到所需的页面。

答案 2 :(得分:2)

这是由于最后一个请求是对页面的POST请求,您需要做的是重定向,以便最后一个请求成为GET。

处理完发布后的数据后,您可以使用以下方法重定向到同一页面:

Response.Redirect("~/ThePage.aspx");

这将阻止您直接从后面的代码向用户显示消息,如果您想使用此方法呈现成功消息,则需要添加查询字符串或类似内容:

Response.Redirect("~/ThePage.aspx?result=success");

如果设置了成功消息的查询字符串,则检查页面绑定,这样的检查可能如下所示:

if (Request.QueryString["result"] != null && Request.QueryString["result"].ToString().ToLower() == "success")
{
    //Show success message
}

另一个可能优于但可能需要更多工作的解决方案是将表单包装在更新面板中,您可以在此处阅读更多相关信息:http://ajax.net-tutorials.com/controls/updatepanel-control/

更新面板将使表单通过AJAX而不是完整的回发提交。

答案 3 :(得分:2)

请参阅有关PRG模式的文章:http://en.wikipedia.org/wiki/Post/Redirect/Get

简而言之,在用户向服务器POST POST(提交)数据后,您发出Response.Redirect以让用户浏览器获取页面。这样,如果用户按下重新加载按钮,则重复GET请求。