如何解决ShoppingCart ;Collection 已修改;枚举操作可能不会执行
我有一个购物车列表,我想循环查看,当该商品已在购物车中时,必须增加数量,否则必须创建一个新对象。
我知道您不能在循环中更改列表, 所以我尝试使用 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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。