代码如下,只添加一件商品的时候没问题,可是加入第二件的时候的时候就会报错,说什么集合以经改变,特来这找大大帮我解决啦 int id = Convert.ToInt32(Request["bid"]);
        if (Session["Shop"] == null)
        {
            List<ShopCart> list = new List<ShopCart>();
            ShopCart shop = new ShopCart();
       //     list.Count = 1;
            shop.Book = BookManager.GetBookById2(id);
            shop.Number = 1;
            shop.Money = shop.Number * shop.Book.UnitPrice;
            list.Add(shop);
            Session["Shop"] = list;        }
        else
        { 
            List<ShopCart> list=Session["Shop"] as List<ShopCart>;
            foreach (ShopCart cart in list)
            {                if (cart.Book.Id == id)
                {                    cart.Number += 1;
                }
                else
                {
                    ShopCart shop = new ShopCart();
                    shop.Book = BookManager.GetBookById2(id);
                    shop.Number = 1;
                    shop.Money = shop.Number * shop.Book.UnitPrice;
                    list.Add(shop);
                
                    Session["Shop"] = list;
                    
                   
                }
            }        }
        Response.Redirect("Cart.aspx");
    }

解决方案 »

  1.   

     List <ShopCart> list = new List <ShopCart>(); 
    这里错了。因为每new一次就是重新实例化出了一个新的LIst集合对象。这样,每个商品都装在了一个新的List中,也就是说每个List中只有一个商品。所以不能添加两个商品。
      

  2.   

    肯定不是你说的错误, 你说的代码是第一次添加时执行的.楼主是第二件时出错.
    应该在each中做判断,是否已经包含当前商品, 然后在foreach外根据判断结果,决定添加还是跳过.
      

  3.   

    总之, 不能在foreach内部修改foreach的数据集.
    楼主可以多了解下foreach关键词.
      

  4.   

     int id = Convert.ToInt32(Request["bid"]);
                if (Session["Shop"] == null)
                {
                    List<ShopCart> list = new List<ShopCart>();
                    ShopCart shop = new ShopCart();
                    //    list.Count = 1; 
                    shop.Book = BookManager.GetBookById2(id);
                    shop.Number = 1;
                    shop.Money = shop.Number * shop.Book.UnitPrice;
                    list.Add(shop);
                    Session["Shop"] = list;
                }
                else
                {
                    List<ShopCart> list = Session["Shop"] as List<ShopCart>;                bool flag = false;                   foreach (ShopCart cart in list)
                    {
                        if (cart.Book.Id == id)
                        {
                            cart.Number += 1; //存在id就在原来的数量上加1
                            flag = true;
                            break;
                        }
                    }
                    if (flag == false)   //遍历整个list都没有找到id则说明是新的商品。添加到list中
                    {
                        ShopCart shop = new ShopCart();
                        shop.Book = BookManager.GetBookById2(id);
                        shop.Number = 1;
                        shop.Money = shop.Number * shop.Book.UnitPrice;
                        list.Add(shop); 
                    }
                    Session["Shop"] = list; // 数量改变或者添加新的商品都要修改Session的值。
                }
                Response.Redirect("Cart.aspx");修改了下你的代码,如上所示
      

  5.   

    太感谢了哈,本来还想着,在用一个Session来接收直= =,晚上回去在试下