ASP.NET重複コミット防止

7224 ワード

現在、多くのサイトがページ挿入やデータベースの更新を提出しています.例えば、伝言帳、1人のユーザーが伝言を提出した後、F 5を押すと、伝言を再提出し、データベースに2つの同じ伝言が表示されます.本稿では、ページのリフレッシュを防止し、データを繰り返し提出する方法を紹介しました.
 
現在、多くのサイトがページ挿入やデータベースの更新を提出しています.例えば、伝言帳、1人のユーザーが伝言を提出した後、F 5を押すと、伝言を再提出し、データベースに2つの同じ伝言が表示されます.本稿では、ページのリフレッシュを防止し、データを繰り返し提出する方法を紹介しました.
【全文】
1、最も簡単で最もよく使われる方法で、転向ページ文を使って、2種類に分けます:a.サーバー側のResponseを使う.Redirect("YourPage"); b.クライアントスクリプトlocationを使用する.href='yourPage';この2つの方法の欠点は、ページデータを保持するのに不便な場合、保持しなくても使用できることです.
2、操作完了1つのセッションを設定し、ページに入るとそのセッションがnullであるか否かを判断し、既にコミットされていることを示すのではないが、欠点はこのページがこれ以上コミットできないことであり、他のページでこのセッションをクリアしなければならないことである.
3、ネットで検索した方案で、勉強して共有します:DetectRefresh.aspx ===========================
この記事の転載:http://www.360doc.com/content/13/1202/09/10504424_333802187.shtml
 
<%@   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;   

    }   

  }   

  }
, IsPageRefreshed " , ",
if(!IsRefresh )
{
  
}