MVC 5中的会话增量

时间:2014-12-11 10:45:24

标签: .net session model-view-controller increment

我们正在使用会话来收集产品。这只是一个项目,我们知道这不是可扩展的,也不是很聪明,只是为了展示。在任何情况下,每次我们从页面添加产品时,它都会通过一个篮子添加到侧面的篮子中。在这里,我们有名称,价格和数量。它应该添加正常,但当我们再次添加相同的产品时,它只是将它添加到列表中,而不是增加现有产品。

是否有一种“简单”的方法可以在现有代码中添加一些功能来实现这一目标,还是一个失败的原因?

这是我们添加它的控制器操作:

 [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);
        }

1 个答案:

答案 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);
 }