頁面刷新導(dǎo)致數(shù)據(jù)重復(fù)提交這個問題困擾我也很久了,在網(wǎng)上搜了一個大家把解決的辦法多聚焦在了如何判定是刷新還是正常提交上了。這個方法通過Session放一些識別數(shù)據(jù)也可以解決問題。
這里我只是想提供另外一個思路,不是完美解決重復(fù)提交,僅供博友們參考。
“GET”與“POST”想必大家已經(jīng)了解很多了,也只有在post時,才會擔(dān)心刷新致使重復(fù)提交。自從asp.net出世,受winform的影響,大家肯定大量的爛用postback。我覺得,大部分展現(xiàn)數(shù)據(jù)時還是用get,大不了多加幾個querystring,只有在執(zhí)行數(shù)據(jù)操作時才用 post, 一量數(shù)據(jù)提交完畢之后,立即切換成get方式,這樣用戶都沒有機會使用刷新重復(fù)提交數(shù)據(jù)。當(dāng)然,這只是我的嘗試,歡迎大家提出反對意見。
每次執(zhí)行完一次事件,立即調(diào)用Reload,用GET方法重新查看已經(jīng)提交數(shù)據(jù)。當(dāng)然,如果這個提交的過程很久,其間用戶點了刷新,這段代碼就無能為力了。
C# Code復(fù)制內(nèi)容到剪貼板
- protected void Button1_Click(object sender, EventArgs e)
- {
- count++;
- this.Button1.Text = count.ToString();
- Reload("run success!");
- }
- private void Reload(string message)
- {
- string script = "<script>alert(\"{0}\");window.location.href=\"{0}\";</script>";
- string outstring;
- if (string.IsNullOrEmpty(message))
- {
- Response.Redirect(this.Request.Url.OriginalString);
- }
- else
- {
- outstring = string.Format(script, message, this.Request.Url.OriginalString);
- Response.Write(outstring);
- Response.End();
- }
- }