2013-04-23 27 views
0

我將盡可能準確描述此錯誤,就目前而言,據我所知,它似乎是隨機的。奇怪的ASP.net標籤和回發問題

爲了給出一些背景信息,我正在做一個網上商店,用戶點擊一個'添加'按鈕從我的gridview的模板字段添加項目到他們的購物車。這需要他們想要購買的物品並將其插入到購物車數據庫表中,然後當點擊'cart'icon顯示內容時,通過gridview顯示該表格。

現在,當用戶單擊該項目時,運行檢查以確保該項目不在籃中。如果它在那裏,則將其更新爲新的金額,如果不是,則將其插入到購物車數據庫中,同時更新標籤以顯示物品的數量。 這一切都工作得很好,除了我有一個令人沮喪的錯誤,有時按鈕不會添加或更新購物車或標籤總數,當項目被點擊。這似乎發生在最常見的第一個網格項目上。

我已經通過調試加強,它似乎都可以工作,正在從gridrow等獲得正確的ID 我想知道,如果它是某種形式的回傳問題

的代碼,負荷方法來設置車的內容在網站主的onload方法:

 protected void Page_Load(object sender, EventArgs e) 
    { 

     if (Session["usersName"] != null) 
     { 
      object a = Session["_id"]; 
      IDMaster = Convert.ToInt32(a); 

      UserWelcome.Text = "Welcome back " + Session["usersName"].ToString(); 
      cartButton.Visible = true; 
      Label1.Visible = true; 
      Label2.Visible = true; 
      memberLogin.Visible = false; 
      LblOr.Visible = false; 
      lblPlease.Visible = false; 
      memberLogin.Visible = false; 
      memberReg.Visible = false; 

     } 

     else 
     { 
      cartButton.Visible = false; 
      Label1.Visible = false; 
      Label2.Visible = false; 
      UserWelcome.Visible = false; 
      memberLogin.Visible = true; 
      memberLogout.Visible = false; 
      LblOr.Visible = true; 
      lblPlease.Visible = true; 
      memberLogin.Visible = true; 
      memberReg.Visible = true; 

      MenuItem foo = NavigationMenu.FindItem("My Orders"); // your particular item 
      NavigationMenu.Items.Remove(foo); 

     } 

     setCart(); 

    } 

    private void setCart() 
    { 

     int cartItems; 
     string cartNos; 

     SqlConnection sqlcon = new SqlConnection(connString); 
     SqlCommand sqlcmd = new SqlCommand("SELECT * FROM contents WHERE memberID = " + IDMaster + "", sqlcon); 
     SqlDataAdapter adp = new SqlDataAdapter(sqlcmd); 
     DataSet ds = new DataSet(); 
     adp.Fill(ds); 


     if (ds.Tables[0].Rows.Count > 0) 
     { 
      cartItems = ds.Tables[0].Rows.Count; 
      cartNos = cartItems.ToString(); 
      Label1.Text = cartNos; 
     } 


     else 
     { 

      int noItems = 0; 
      string convertEmptyItems; 

      convertEmptyItems = noItems.ToString(); 
      Label1.Text = convertEmptyItems; 
     } 

    } 

代碼用於在添加或更新車依賴,如果項目已經excists:

 GridViewRow row = ((Button)sender).Parent.Parent as GridViewRow; 
     TextBox t = (TextBox)row.FindControl("txtQuan"); 

     object ID = GridView1.DataKeys[row.RowIndex].Value; 

     rowID = Convert.ToInt32(ID); 

     ViewState["ID"] = rowID; 

     string qty = t.Text; 

     int stockToAdd = Convert.ToInt32(qty); 

     DBHandler add = new DBHandler(rowID); 

     int qtyCheck = add.getStockQty(); 

     if (stockToAdd > qtyCheck) 
     { 

      Button2_ModalPopupExtender.Show(); 

     } 

     else{ 


      SqlConnection con; 
      con = add.openDB(); 

      con.Open(); 

      DBHandler idCheck = new DBHandler(rowID); 
      int rows = idCheck.checkCartRows(); 

      if (rows > 0) 
      { 
       int qtyNow = idCheck.getCartQty(); 

       int updateStock = qtyNow + stockToAdd; 

       idCheck.updateQty(rowID, updateStock); 
       updatePanel(); 

      } 

      else 
      { 

       idCheck.insertCart(IDMaster, qty); 
       updatePanel(); 

      } 
      add.close(); 

      DBHandler updateCart = new DBHandler(IDMaster); 

      int newRows = updateCart.checkCartRowsAfterUpdate(); 

      string numberOfRows = newRows.ToString(); 

      ((Label)this.Master.FindControl("Label1")).Text = numberOfRows; 

     } 


     } 

對這個問題含糊不清,但我真的可以把它放下!希望有人會看到我做錯的事。

+0

你是否使用驗證到你的網頁中,如需要的領域等等等等...... – Rahul 2013-04-23 10:23:49

+0

你遇到生命週期問題是我的猜測。你的頁面的負載將首先發生,然後加載你的masterpage,然後你添加功能從一個按鈕點擊將運行。因此,您的內容在實際添加之前會被加載。 – Yeronimo 2013-04-23 10:28:35

+0

@Rahul此頁面沒有驗證。 – user1352057 2013-04-23 10:28:43

回答

0

好的排序。事實證明,這是我錯過了一些東西。基本上,當我顯示我的購物車內容時,我正在爲所有會員購物車顯示它。這讓我感到困惑,因爲在這一點上它增加了這個項目。我的'購物車'只會顯示通過會話變量登錄的特定成員的內容。當我的購物車檢查是否已添加商品時,它會看到爲所有成員添加的所有商品,所以當然如果其他成員已將商品添加到購物車中,它永遠不會添加它,它只是簡單去更新它,並且它將它添加到標籤不會更新的另一個成員。只要我刪除購物車的內容,我可以添加它。所以基本上我已經修復了我的代碼,以便每個項目都有相應的添加它的成員的ID,並且它工作正常。

這裏的關鍵規則是檢查你的代碼的所有進程缺少愚蠢的東西。