【摘要】
目前很多網站都要提交頁面插入或更新數據庫,比如留言本,一個用戶提交留言后,如果按F5,就會重新提交一遍留言,導致數據庫出現兩條一模一樣的留言,
本文介紹了幾種防止頁面刷新,導致重復提交數據的方法。
【全文】
1、也是最簡單和最常用的辦法,就是使用轉向頁面語句,分兩種:
a.使用服務器端的 Response.Redirect("YourPage");
b.使用客戶端腳本 <script language=javascript>location.href='yourPage';</script>
這兩種方法的缺點是如果要保留頁面數據不太方便,如果不用保留可以采用。
2、操作完畢設置一個Session,進入頁面時判斷這個Session是否為null,如果不是表示已經提交過了,但是缺點就是這個頁面無法再提交了,必須在別的頁面清空這個Session。
3、是從網上搜索到的一種方案,學習並共享一下:
DetectRefresh.aspx
===========================
<%@ Page Inherits="StevenBey.Web.UI.Page" %> <html> <head> <title>Detecting Page Refresh [Demo]</title> </head> <body> <form runat="server"> <asp:button Text="Test Refresh" runat="server" /> </form> IsRefresh = <%= IsRefresh %> </body> </html>
StevenBey.Web.UI.Page.cs
======================
namespace StevenBey.Web.UI { public class Page : System.Web.UI.Page { private bool _refreshState; private bool _isRefresh; public bool IsRefresh { get { return _isRefresh; } } protected override void LoadViewState(object savedState) { object[] allStates = (object[]) savedState; base.LoadViewState(allStates[0]); _refreshState = (bool) allStates[1]; _isRefresh = _refreshState == (bool) Session["__ISREFRESH"]; } protected override object SaveViewState() { Session["__ISREFRESH"] = _refreshState; object[] allStates = new object[2]; allStates[0] = base.SaveViewState(); allStates[1] = !_refreshState; return allStates; } } }