Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 购物车显示记录两次_C#_Asp.net_Ado.net - Fatal编程技术网

C# 购物车显示记录两次

C# 购物车显示记录两次,c#,asp.net,ado.net,C#,Asp.net,Ado.net,问题是,当同一物品再次添加到购物车时,它会显示同一产品的同一记录两次,这里我希望当我按两次或三次添加到购物车按钮时,它应该是同一物品的增量数量 protected void AddToCartButton_Click(object sender, EventArgs e) { if (con.State == ConnectionState.Open) { con.Close(); } con.Open(); SqlCommand cmd

问题是,当同一物品再次添加到购物车时,它会显示同一产品的同一记录两次,这里我希望当我按两次或三次添加到购物车按钮时,它应该是同一物品的增量数量

protected void AddToCartButton_Click(object sender, EventArgs e)
{
    if (con.State == ConnectionState.Open)
    {
        con.Close();
    }
    con.Open();
    SqlCommand cmd = con.CreateCommand();
    cmd.CommandType = CommandType.Text;
    book_id = Convert.ToInt32(Request.QueryString["book_id"].ToString());
    cmd.CommandText = "select * from Book where book_id = " + book_id + "";
    cmd.ExecuteNonQuery();
    DataTable dt = new DataTable();
    SqlDataAdapter sda = new SqlDataAdapter(cmd);
    sda.Fill(dt);
    foreach (DataRow dr in dt.Rows)
    {                 
        //book_id =Convert.ToInt32(dr["book_id"]);
        title = dr["title"].ToString();
        //quantity = dr["quantity"].ToString();
        quantity = QuantityTxt.Text;
        price = dr["price"].ToString();
    }
    //Restrict User to enter some quantity that he wants...
    if(Convert.ToInt32(QuantityTxt.Text)>Convert.ToInt32(quantity))
    {
        ErrorMsglbl.Text = "Please Enter Lower Quantity";
    }
    else
    {
        ErrorMsglbl.Text = "";
    }
    // Creating Cookies to store the value and then i will assign to data table... 

    if (Request.Cookies["ShoppingCart"] == null)
    {
        Response.Cookies["ShoppingCart"].Value = book_id.ToString() + "," + title.ToString() + "," + quantity.ToString() + "," + price.ToString();
        Response.Cookies["ShoppingCart"].Expires = DateTime.Now.AddDays(1);
    }
    else
    {
        Response.Cookies["ShoppingCart"].Value = Request.Cookies["ShoppingCart"].Value + "|" + book_id.ToString() + "," + title.ToString() + "," + quantity.ToString() + "," + price.ToString();
        Response.Cookies["ShoppingCart"].Expires = DateTime.Now.AddDays(1);
    }

    Response.Redirect("BookDetails.aspx?book_id="+book_id.ToString()+"&Cat_ID="+ViewState["cat"]+"");

}// End Add To Cart Button... 

问题在于else块

 Response.Cookies["ShoppingCart"].Value = Request.Cookies["ShoppingCart"].Value + 
"|" + book_id.ToString() + "," + title.ToString() + 
"," + quantity.ToString() + "," + price.ToString();
在这里,您将以前的cookie值与新内容一起分配给新cookie。例如,如果您的饼干中有“1,Shoe,1,25”,并且再次将相同的产品添加到购物车中,您将得到类似“1,Shoe,1,25 | 1,Shoe,1,25”的内容

这个问题可以通过多种方法解决

  • 拆分cookies并检查book\u id值
  • 使用对象存储购物车项目并在会话中保存它们
  • 先接近

    String[] carts = Request.Cookies["ShoppingCart"].Value.Split("|")
    bool bookIdExists = false;
    foreach(string cartDetail in carts)
    {
      string  bookId = cartDetail.Split(",")[0];
      if(bookId == newBookId)
      {
        bookIdExists = true;
      }
    }
    if(!bookIDExists)
    {
      //Add your new item to Cookie
    }
    
    第二种方法

    public Class Cart
    {
      public int BookId {get; set;}
      public string Title {get; set;}
      public int Qty {get; set;}
      public decimal Price {get; set}
    }
    
    List<Cart> carts =Session["Cart"]==null? new List<Cart>(): Session["Cart"] as List<Cart>;
    var existingCart = carts.Where(x=> x.BookId==newBookId).FirstOrDefault();
    if(existingCart==null)
    {
      Cart c= new Cart {
      BookId = newBookId,
      Title =newTitle,
      Qty = newQty,
      Price =newPrice
    };
     carts.Add(c);
     Session["Cart"] = carts;
    }
    
    公共类购物车
    {
    public int BookId{get;set;}
    公共字符串标题{get;set;}
    公共整数数量{get;set;}
    公共十进制价格{get;set}
    }
    列表购物车=会话[“购物车”]==空?新建列表():会话[“购物车”]作为列表;
    var existingCart=carts.Where(x=>x.BookId==newBookId.FirstOrDefault();
    如果(existingCart==null)
    {
    购物车c=新购物车{
    BookId=newBookId,
    标题=新标题,
    数量=新数量,
    价格=新价格
    };
    添加(c);
    会话[“购物车”]=购物车;
    }
    
    你可以用更好的方法来解决这个问题

    但使用cookie来存储购物车的详细信息是个糟糕的主意


    问题在于else块

     Response.Cookies["ShoppingCart"].Value = Request.Cookies["ShoppingCart"].Value + 
    "|" + book_id.ToString() + "," + title.ToString() + 
    "," + quantity.ToString() + "," + price.ToString();
    
    在这里,您将以前的cookie值与新内容一起分配给新cookie。例如,如果您的饼干中有“1,Shoe,1,25”,并且再次将相同的产品添加到购物车中,您将得到类似“1,Shoe,1,25 | 1,Shoe,1,25”的内容

    这个问题可以通过多种方法解决

  • 拆分cookies并检查book\u id值
  • 使用对象存储购物车项目并在会话中保存它们
  • 先接近

    String[] carts = Request.Cookies["ShoppingCart"].Value.Split("|")
    bool bookIdExists = false;
    foreach(string cartDetail in carts)
    {
      string  bookId = cartDetail.Split(",")[0];
      if(bookId == newBookId)
      {
        bookIdExists = true;
      }
    }
    if(!bookIDExists)
    {
      //Add your new item to Cookie
    }
    
    第二种方法

    public Class Cart
    {
      public int BookId {get; set;}
      public string Title {get; set;}
      public int Qty {get; set;}
      public decimal Price {get; set}
    }
    
    List<Cart> carts =Session["Cart"]==null? new List<Cart>(): Session["Cart"] as List<Cart>;
    var existingCart = carts.Where(x=> x.BookId==newBookId).FirstOrDefault();
    if(existingCart==null)
    {
      Cart c= new Cart {
      BookId = newBookId,
      Title =newTitle,
      Qty = newQty,
      Price =newPrice
    };
     carts.Add(c);
     Session["Cart"] = carts;
    }
    
    公共类购物车
    {
    public int BookId{get;set;}
    公共字符串标题{get;set;}
    公共整数数量{get;set;}
    公共十进制价格{get;set}
    }
    列表购物车=会话[“购物车”]==空?新建列表():会话[“购物车”]作为列表;
    var existingCart=carts.Where(x=>x.BookId==newBookId.FirstOrDefault();
    如果(existingCart==null)
    {
    购物车c=新购物车{
    BookId=newBookId,
    标题=新标题,
    数量=新数量,
    价格=新价格
    };
    添加(c);
    会话[“购物车”]=购物车;
    }
    
    你可以用更好的方法来解决这个问题

    但使用cookie来存储购物车的详细信息是个糟糕的主意


    谢谢你的回答,你的建议给了我正确的解决方法,但我还不能解决问题。谢谢你的回答,你的建议给了我正确的解决方法,但我还不能解决问题。