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”的内容
这个问题可以通过多种方法解决
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”的内容
这个问题可以通过多种方法解决
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来存储购物车的详细信息是个糟糕的主意
谢谢你的回答,你的建议给了我正确的解决方法,但我还不能解决问题。谢谢你的回答,你的建议给了我正确的解决方法,但我还不能解决问题。