#c# #asp.net #.net #asp.net-mvc #asp.net-core
#c# #asp.net #.net #asp.net-mvc #asp.net-ядро
Вопрос:
У меня есть список корзины покупок, который я хочу просмотреть, когда товар уже находится в корзине, количество должно быть увеличено, в противном случае необходимо создать новый объект.
Я знаю, что вы не можете изменять список во время цикла, поэтому я попытался работать с 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
amp;amp; 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));
}
Комментарии:
1.
foreach (var item in shoppingCartsList.ToList())
хотя весь цикл выглядит подозрительно. Что вы на самом деле пытаетесь сделать?2. добавьте новые элементы в другой список, добавьте этот список к исходному, когда закончите цикл. проблема решена, обращение закрыто.
3. к списку() Я уже пробовал, у меня есть сеанс shoppingcart, и когда я добавляю что-то, я сначала хочу посмотреть, есть ли товар уже в корзине. если да, то число будет увеличено, а если нет, то я создам новый объект.
4. Вы не можете добавлять элементы в список, который вы уже просматриваете, простая переработка логики здесь должна помочь. Совет: используйте
shoppingCartsList.Any(sc => sc.ProductId == id)
, чтобы определить, существует ли продукт, затем вы можете добавлять / редактировать. Или используйтеshoppingCartsList.SingleOrDefault(sc => sc.ProductId == id)
и проверьте наличие null.
Ответ №1:
вам не нужен цикл. просто попробуйте найти элемент в списке. если найдено, увеличьте сумму, если нет, создайте новую.
...//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);
Комментарии:
1. спасибо, это действительно имеет больше смысла. это решило проблему 🙂