2009-04-13 112 views
1

我有一個* .aspx頁面,其中包含一個文本框和一個按鈕。當用戶輸入信息到文本框並點擊文章時,它會將數據插入到我的sql數據庫中。問題是,如果用戶點擊刷新,它將繼續向數據庫中插入相同的數據。我很確定整個「點擊」方法被調用,而不僅僅是插入調用。我試着搞會議,但它抱怨。我不知道該怎麼做。我正在尋找一個簡單的解決方法。Asp.Net SQL刷新頁面重複插入?

protected void PostButton_Click(object sender, EventArgs e) 
{ 
    string wpost = (string)Session["WallPost"]; 
    DateTime wtime = (DateTime)Session["WallDateTime"]; 
    if (txtWallPost.Text.Length > 0 && !wpost.Equals(txtWallPost.Text)) 
    { 
     string strCon = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["SocialSiteConnectionString"].ConnectionString; 
     using (SqlConnection conn = new SqlConnection(strCon)) 
     { 
      using (SqlCommand cmd = conn.CreateCommand()) 
      { 
       cmd.CommandText = "INSERT INTO [WallTable] ([UserId], [FriendId], [WallPost]) VALUES (@UserId, @FriendId, @WallPost)"; 
       cmd.Parameters.AddWithValue("@UserId", User.Identity.Name); 
       cmd.Parameters.AddWithValue("@FriendId", User.Identity.Name); 
       cmd.Parameters.AddWithValue("@WallPost", txtWallPost.Text); 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
       Session.Add("WallPost", txtWallPost.Text); 
       Session.Add("WallDateTime", new DateTime()); 
       conn.Close(); 
       txtWallPost.Text = ""; 
       LoadWallPosts(); 
      } 
     } 
    } 
    return; 
} 
+0

可能重複[如何防止重複回發混淆我的業務層](http://stackoverflow.com/questions/481564/how-to-prevent-repeated-postbacks-from-confusing-my-business-layer ) – 2011-09-04 13:59:54

回答

-1

如果他刷新或按後退按鈕後會再次發生,因此,你的頁面會處理由此相同的數據再次插入。

你必須改變你的邏輯

0

如果PostButton_Click是您爲按鈕的Click事件的服務器處理,然後插入只有當用戶點擊後按鈕的代碼應和執行 - 它不應該在的情況下發生刷新。

我敢肯定是不夠的 - 以確保將斷點在你PostButton_Click方法,按F5在調試模式下運行,看看斷點獲取與刷新擊中。

如果是這樣就意味着:

  1. 您呼叫從 別的地方(?Page_Load)明確 PostButton_Click
  2. PostButton_Click卻意外 集作爲事件處理程序
  3. 頁面上的其他一些 事件

快速驗證假設的方法1 & 2是ru n搜索PostButton_Click並查看您在哪裏調用它,或者如果它設置爲標記中某個其他元素(可能是您的表單?)的處理程序。

-1

最好在插入後將客戶端重定向到另一個頁面,但是,如果您確實需要客戶端停留在同一頁面中,則可以在頁面上使用(bool)變量來指定插入是否存在如果已經執行,則跳過插入邏輯

0

Add Response.Redirect(Request.Url.ToString(),false);到你的按鈕事件,並應該解決問題。