2017-06-17 124 views
0

我正在尝试在我的网上商店项目中为购物车创建购物车结账。 我希望每次您的新闻结帐时,都会从购物车会话中的每种产品的型号Clothes.Amount 1中获取。 然后我想清洁购物车。CheckOut购物车MVC

在购物车控制器我有这三个功能,另一个订购,但这对我认为这个问题并不重要。 误差为int此行

Item.Cl.Amount--; 
Delete(Item.Cl.Id); 

下面是代码

private int isExisting(int id) 
     { 
      List<Item> cart = (List<Item>)Session["cart"]; 
      for (int i = 0; i < cart.Count; i++) 
      { 
       if (cart[i].Cl.Id == id) 
        return i; 
      }return -1; 
     } 
public ActionResult Delete(int idDelete) 
     { 
      int index = isExisting(idDelete); 
      List<Item> cart = (List<Item>)Session["cart"]; 
      cart.RemoveAt(index); 
      Session["cart"] = cart; 

      return View("Order"); 

     } 
public ActionResult CheckOut(int idCheck) 
     { 
      int index = isExisting(idCheck); 
      if(index != -1) { 
       foreach (Item item in (List<Item>)Session["cart"]) { 
        Item.Cl.Amount--; 
        Delete(Item.Cl.Id); 
       } 
      } 
      return View(); 
     } 

回答

0

从你的问题,我无法看到你正在哪个错误。但是看看你的代码,我会认为这是经典的“集合已被修改;枚举操作可能无法执行”。

在方法CheckOut您正在遍历会话中的项目列表。当你这样做时,你可以调用Delete方法从列表中删除一个项目。这是完全不允许的......

如果这是你的问题,你可以在你的第二个方法更改为以下:

public ActionResult CheckOut(int idCheck) 
     { 
      int index = isExisting(idCheck); 
      if(index != -1) { 
       foreach (Item item in ((List<Item>)Session["cart"]).ToList()) { 
        Item.Cl.Amount--; 
        Delete(Item.Cl.Id); 
       } 
      } 
      return View(); 
     }