编辑和删除列表中的特定视图模型

本文关键字:视图 模型 删除 删除列 列表 编辑 | 更新日期: 2023-09-27 18:17:26

我正在制作一个购物车,为了跟踪购物车,我有一个包含产品视图模型列表的会话。

这是添加到购物车的操作方法:

public ActionResult AddToCart(string id)
        {
            List<CartVM> cartVMList = new List<CartVM>();
            CartVM cartVM = new CartVM();
            int productId = Int32.Parse(id);
            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"];
                cartVMList.Add(cartVM);
            }
            else
            {
                cartVMList.Add(cartVM);
            }
            Session["cart"] = cartVMList;
            //return Content(id);
            return RedirectToAction("Index", "ShoppingCart");
        }

它在添加新产品时起作用,因此,例如,如果我添加5个新产品,会话将包含5个产品的列表,但是我如何从列表中编辑和删除特定的视图模型,例如基于ProductId ?

编辑和删除列表中的特定视图模型

我还没有测试过,但是下面应该可以工作。您所需要做的就是像添加到购物车时那样抓取购物车列表。无需添加新项,只需在列表中编辑该对象或将其从列表中删除即可。

从技术上讲,除非Session做了一些特殊的事情,否则如果您从会话中获得列表,则不需要将列表重新保存到Session中,因为列表是引用类型。

public ActionResult EditCartItem(string id, int quantity, decimal price)
{
    if (Session["cart"] != null)
    {
        var cartVMList = (List<CartVM>) Session["cart"];
        var itemToEdit = cartVMList.FirstOrDefault(cartVM => cartVM.Id == id);
        if(itemToEdit == null)
            return this.HttpNotFound();
        itemToEdit.Quantity = quantity;
        itemToEdit.Price = price;           
    }
}
public ActionResult RemoveFromCart(string id)
{
    if (Session["cart"] != null)
    {
        var cartVMList = (List<CartVM>) Session["cart"];
        var itemToRemove = cartVMList.FirstOrDefault(cartVM => cartVM.Id == id);
        if(itemToRemove == null)
            return this.HttpNotFound();
        cartVMList.Remove(itemToRemove);
    }
}