问题描述
我有一个购物车列表,我想循环查看,当该商品已在购物车中时,必须增加数量,否则必须创建一个新对象。
我知道您不能在循环中更改列表, 所以我尝试使用 Tolist() 但是当我尝试他只制作第一个对象并在我制作第二个对象时覆盖。
[HttpPost,ActionName("Details")]
[ValidateAntiForgeryToken]
public IActionResult DetailsPost(int id,DetailsProductviewmodel detailsProductviewmodel)
{
List<ShoppingCart> shoppingCartsList = new List<ShoppingCart>();
if (HttpContext.Session.Get<IEnumerable<ShoppingCart>>(WC.SessionCart)!=null
&& HttpContext.Session.Get<IEnumerable<ShoppingCart>>(WC.SessionCart).Count() > 0)
{
shoppingCartsList = HttpContext.Session.Get<List<ShoppingCart>>(WC.SessionCart);
foreach (var item in shoppingCartsList)
{
if (item.ProductId == id)
{
item.Aantal += 1;
}
else
{
shoppingCartsList.Add(new ShoppingCart { ProductId = id,Aantal = detailsProductviewmodel.Product.Aantal });
}
}
}
else
{
shoppingCartsList.Add(new ShoppingCart { ProductId = id,Aantal = detailsProductviewmodel.Product.Aantal });
}
HttpContext.Session.Set(WC.SessionCart,shoppingCartsList);
return RedirectToAction(nameof(Index));
}
解决方法
你不需要循环。只需尝试在列表中找到该项目。如果找到,增加数量,如果没有创建新的。
...//also check your shoppingCartsList is null or not
var product = shoppingCartsList.FirstOrDefault(x=>x.ProductId == id);
if(product == null)
{
shoppingCartsList.Add(new ShoppingCart { ProductId = id,Aantal = detailsProductViewModel.Product.Aantal });
}
else
{
product.Aantal++;
}
HttpContext.Session.Set(WC.SessionCart,shoppingCartsList);