[转载]用一个最简单方法解决asp.net页面刷新导致数据的重复提交 – 该死的代码 – 博客园.
页面刷新导致数据重复提交这个问题困扰我也很久了,在网上搜了一个大家把解决的办法多聚焦在了如何判定是刷新还是正常提交上了。这个方法通过Session放一些识别数据也可以解决问题。
这里我只是想提供另外一个思路,供博友们参考。
“GET”与“POST”想必大家已经了解很多了,也只有在post时,才会担心刷新致使重复提交。自从ASP.NET出世,大家肯定大量 的烂用post。我觉得,大部分情况还是用get,大不了多加几个querystring,只有数据操作时才用post, 一量数据提交完毕之后,立即切换成get方式,这样用户都没有机会使用刷新重复提交数据。
每次执行完一次事件,立即调用Reload,用GET方法重新查看已经提交数据。当然,如果这个提交的过程很久,其间用户点了刷新,这段代码就无能为力了。
protected void Button1_Click(object sender, EventArgs e)
{
count++;
this.Button1.Text = count.ToString();
Reload(“run success!“);
} private void Reload(string message)
{
string script1 = “<script>alert(\“{0}\“);window.location.href='{0}’;</script>“;
string script2 = “<script>window.location.href=\“{0}\“;</script>“;
string outstring; if (string.IsNullOrEmpty(message))
{
outstring = string.Format(script2, this.Request.Url.OriginalString);
}
else
{
outstring = string.Format(script1, message, this.Request.Url.OriginalString);
}
{
count++;
this.Button1.Text = count.ToString();
Reload(“run success!“);
} private void Reload(string message)
{
string script1 = “<script>alert(\“{0}\“);window.location.href='{0}’;</script>“;
string script2 = “<script>window.location.href=\“{0}\“;</script>“;
string outstring; if (string.IsNullOrEmpty(message))
{
outstring = string.Format(script2, this.Request.Url.OriginalString);
}
else
{
outstring = string.Format(script1, message, this.Request.Url.OriginalString);
}
Response.Write(outstring);
Response.End();
}