我们正在使用会话来收集产品。这只是一个项目,我们知道这不是可扩展的,也不是很聪明,只是为了展示。在任何情况下,每次我们从页面添加产品时,它都会通过一个篮子添加到侧面的篮子中。在这里,我们有名称,价格和数量。它应该添加正常,但当我们再次添加相同的产品时,它只是将它添加到列表中,而不是增加现有产品。
是否有一种“简单”的方法可以在现有代码中添加一些功能来实现这一目标,还是一个失败的原因?
这是我们添加它的控制器操作:
[HttpPost]
public ActionResult Index(Dish dish)
{
Basket basket;
if (Session["Basket"] == null)
{
basket = new Basket();
Session["Basket"] = new Basket();
}
else
{
basket = (Basket)Session["Basket"];
}
BasketItem basketItem = new BasketItem();
basketItem.DishId = dish.DishId;
basketItem.Title = dish.Title;
basketItem.Number = dish.Number;
basketItem.Price = dish.Price;
basket.AddItem(basketItem);
return RedirectToAction("Index", basket.Items);
}
这是为了在我们的局部视图中显示它:
[ChildActionOnly]
public ActionResult BasketItemsList()
{
Basket basket;
if (Session["Basket"] == null)
{
basket = new Basket();
Session["Basket"] = new Basket();
}
else
{
basket = (Basket)Session["Basket"];
}
return PartialView("_Basket", basket.Items);
}
答案 0 :(得分:1)
假设BasketItem.Number
是你的数量而BasketItem.DishId
是你的关键,那么只是DishId的当前列表,如果它在那里增加它,或者添加一个新的。
[HttpPost]
public ActionResult Index(Dish dish)
{
Basket basket;
if (Session["Basket"] == null)
{
basket = new Basket();
Session["Basket"] = new Basket();
}
else
{
basket = (Basket)Session["Basket"];
}
BasketItem basketItem = new BasketItem();
basketItem.DishId = dish.DishId;
basketItem.Title = dish.Title;
basketItem.Number = dish.Number;
basketItem.Price = dish.Price;
var possibleDuplicate = baskey.Items.Where(x => x.DishId == basketItem.DishId).FirstOrDefault();
if (possibleDuplicate != null)
{
possibleDuplicate.Number += 1;
}
else
{
basket.AddItem(basketItem);
}
return RedirectToAction("Index", basket.Items);
}