檢查頁面是否通過點擊submit按鈕而回發的方法是使用IsPostBack,那么有時候我們需要檢查一個頁面是否被重復刷新過,以便防止重復提交數據。當然,判斷方法很多,我這里簡單說一下一個比較簡單而且容易理解的辦法——就是使用Session進行檢查(因為Session放在服務端,而且第一次加載訪問頁面的時候可以進行一個記錄,以后就直接判斷該頁面中的Session是否為null,如果不為null則說明已經刷新過了)。這里我封裝了一個控件UserControl,其中代碼如下
[C#]
namespace WebCSharp { public partial class RefreshCheck : System.Web.UI.UserControl { /// <summary> /// 是否刷新標識符 /// </summary> public bool ReFreshCheck { get; set; } /// <summary> /// 獲取父頁面的類的名稱:該名字唯一且不重復,Title可能重復 /// </summary> string parentName = null; protected override void OnInit(EventArgs e) { if (Parent.Parent is Page) { parentName = Parent.Parent.GetType().Name; if (IsPostBack) //如果是回發,重新設置第一次加載,不算刷新 { ReFreshCheck = false; Session[parentName] = null; //設置null,表示不是重復加載 } else if (Request.UrlReferrer != null && Request.UrlReferrer.ToString() != Request.Url.ToString()) { Session[parentName] = null; } else { //檢測是否是其它頁面Response.Redirect過來的,以免誤操作 if (Session[parentName] == null) { ReFreshCheck = false; Session[parentName] = true; } else { ReFreshCheck = true; } } } else { throw new Exception("該控件檢測本頁面是否刷新,故必須放於本頁面內!"); } } } }
[VB.NET]
Namespace WebCSharp Public Partial Class RefreshCheck Inherits System.Web.UI.UserControl ''' <summary> ''' 是否刷新標識符 ''' </summary> Public Property ReFreshCheck() As Boolean Get Return m_ReFreshCheck End Get Set m_ReFreshCheck = Value End Set End Property Private m_ReFreshCheck As Boolean ''' <summary> ''' 獲取父頁面的類的名稱:該名字唯一且不重復,Title可能重復 ''' </summary> Private parentName As String = Nothing Protected Overrides Sub OnInit(e As EventArgs) If TypeOf Parent.Parent Is Page Then parentName = Parent.Parent.[GetType]().Name If IsPostBack Then '如果是回發,重新設置第一次加載,不算刷新 ReFreshCheck = False '設置null,表示不是重復加載 Session(parentName) = Nothing ElseIf Request.UrlReferrer IsNot Nothing AndAlso Request.UrlReferrer.ToString() <> Request.Url.ToString() Then Session(parentName) = Nothing Else '檢測是否是其它頁面Response.Redirect過來的,以免誤操作 If Session(parentName) Is Nothing Then ReFreshCheck = False Session(parentName) = True Else ReFreshCheck = True End If End If Else Throw New Exception("該控件檢測本頁面是否刷新,故必須放於本頁面內!") End If End Sub End Class End Namespace
你只要拖拽此控件到任意需要檢查的頁面(必須放在Page中,建議在<div>下)。然后直接使用RefreshCheck檢測即可。