防止刷新頁面提交的方法


檢查頁面是否通過點擊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檢測即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM