代码如下,只添加一件商品的时候没问题,可是加入第二件的时候的时候就会报错,说什么集合以经改变,特来这找大大帮我解决啦 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");
}
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");
}
解决方案 »
- 用户、角色、权限问题。怎么做才不麻烦呢?现在每页上都要放一个权限标记
- 时时间已到。超时时间已到,但是尚未从池中获取连接。
- 必须声明标量变量 "@id"。
- 关于参数传值的问题
- 请教:颜色赋值问题?(急用!!)
- 怎么灵活的获取传递到页面的上的参数呀,有代码!!请高手帮忙!!急!!
- 在线求助!!
- wmv格式的视频,怎么在360浏览器,ie,火狐,chorme等主流的浏览器兼容播放?在线等
- 哪位高手知道在虚拟根目录运行正常的项目文件放在虚拟目录的子目录如何运行???????
- 请问:ASP.net和什么语言结合最好??(VB,C#,c++......)
- 为什么dropdownlist,改变选项没反应啊?(我已近设置把autopostback为true)
- 怎么控制asp.net中页面大小
这里错了。因为每new一次就是重新实例化出了一个新的LIst集合对象。这样,每个商品都装在了一个新的List中,也就是说每个List中只有一个商品。所以不能添加两个商品。
应该在each中做判断,是否已经包含当前商品, 然后在foreach外根据判断结果,决定添加还是跳过.
楼主可以多了解下foreach关键词.
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");修改了下你的代码,如上所示