迭代视图模型列表并计算值

时间:2016-11-11 23:37:20

标签: c# asp.net-mvc

我有一个AddToCart动作方法,通过ajax将产品添加到购物车,它基本上工作正常,但有时(我无法确定它),例如我从一个类别中添加了一些产品,然后从另一个类别中添加了一些产品,并且总数增加了两倍,例如如果我从一个类别添加3,然后从另一个类别添加1,它将是4,然后再次为10!然后它将继续照常进行。

你能看到这段代码有什么问题吗?

public ActionResult AddToCart(string id)
        {
            List<CartVM> cartVMList = new List<CartVM>();
            CartVM cartVM = new CartVM();

            int productId = Int32.Parse(id);
            int qty = 0;
            decimal price2 = 0;

            Db db = new Db();

            var result = db.Products.FirstOrDefault(x => x.Id == productId);
            decimal price = result.Price;

            cartVM.ProductId = productId;
            cartVM.Quantity = 1;
            cartVM.Price = price;

            if (Session["cart"] != null)
            {
                cartVMList = (List<CartVM>)Session["cart"];
                var itemToEdit = cartVMList.FirstOrDefault(x => x.ProductId == productId);
                if (itemToEdit == null)
                {
                    cartVMList.Add(cartVM);
                }
                else
                {
                    itemToEdit.Quantity++;
                }

                foreach (var item in cartVMList)
                {
                    qty += item.Quantity;
                    price2 += item.Quantity * item.Price;
                }

                cartVM.Quantity = qty;
                cartVM.Price = price2;

            }
            else
            {
                cartVMList.Add(cartVM);
                Session["cart"] = cartVMList;
            }

            return PartialView(cartVM);

        }

基本上if (Session["cart"] != null)部分是它的主要部分,而我认为问题出在哪里。

1 个答案:

答案 0 :(得分:0)

你的方法包含很多不必要的东西,可以简化很多:

docker images --tree