在網上搜 一下,可以找到很多關于這方面的資料,其中有一篇是來自MSDN上的一種解決方法: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/BedrockASPNET.asp 它是通過重新定義 System.Web.UI.Page 類來實現加載頁面時,是“刷新”、“后退”請求,還是正常請求,其他的頁面則繼承了自定義的這 個Page類。感覺他這個方法比較獨特,有例子可以下載,有興趣的可以研究研究。
網上最多的解決此類問題的方法就是不保存緩存,即提交后表單上的數據不會被瀏覽器的緩存保存,如果此時再遇到刷新或者后退請求時, 就會顯示“網頁已過期”,數據也就不會重復提交了,這就起到了阻止刷新重復提交的效果。
下面以簡單的提交一篇帖子為例,介紹禁用緩存防止刷新重復提交的方法,表單數據包括“標題”和“正文”兩個部分。
以下是該方法的代碼(post.aspx):
代碼如下:
//頁面加載
protected void Page_Load(object sender, EventArgs e)
{
//可以在頁面加載時設置頁面的緩存為“SetNoStore()”,即無緩存
Response.Cache.SetNoStore();
//Session中存儲的變量“IsSubmit”是標記是否提交成功的
if ((bool)Session["IsSubmit"])
{
//如果表單數據提交成功,就設“Session["IsSubmit"]”為false
Session["IsSubmit"] = false;
//顯示提交成功信息
ShowMsg.Text = " * 提交成功!";
}
else
//否則的話(沒有提交,或者是頁面刷新),不顯示任何信息
ShowMsg.Text = "";
}
//提交按鈕(btnOK)單擊事件
protected void btnOK_Click(object sender, EventArgs e)
{
if (txtTitle.Text.ToString().Trim() == "")
//ShowMsg是用來顯示提示信息的
ShowMsg.Text = " * 標題不能為空!";
else if (txtText.Text.ToString().Trim() == "")
ShowMsg.Text = " * 內容不能為空!";
else
{
//這里是將數據提交到數據庫中,省略
/*
string sql = "insert into tab...values(...)";
MyConn.ExecQuery(sql);
*/
//提交成功后,設“Session["IsSubmit"]”為true
Session["IsSubmit"] = true;
//強制轉換頁面(不可少,否則刷新仍會重復提交,仍轉到本頁),
通過頁面的轉換將緩存中的提交的數據都釋放了,即提交的標單數據不會被保存到緩存里,
新聞熱點
疑難解答
圖片精選