我整天都遇到了这个问题,我仍然无法弄明白为什么。
public ActionResult AddToCart(string productcode, int productQty)
{
var db = new PetaPoco.Database("ProductDB");
var sql = Sql.Builder.Append("Select *");
sql.Append("from Product");
sql.Append("where Code= @0", productcode);
Product product = db.SingleOrDefault<Product>(sql);
Cart cart = GetCart();
cart.AddToCart(product, productQty);
return View(cart);
}
这是我的GetCart()
代码。
public Cart GetCart()
{
Cart cart = (Cart)Session["cart"];
if (cart == null)
{
cart = new Cart();
Session["cart"] = cart;
}
return cart;
}
这是我的AddToCart(Product p, int qty)
代码。
public List<Product> AddToCart(Product p, int qty)
{
if (p != null)
{
cart.Add(p);
}
return cart;
}
cart.Add(p)
引发错误。有谁知道它为什么哭?
答案 0 :(得分:0)
试试这个:
public Cart GetCart()
{
if (Session["cart"]== null)
{
Cart cart = new Cart();
Session["cart"] = cart;
return cart;
}
else
{
Cart cart = (Cart)Session["cart"];
return cart;
}
}
public List<Product> AddToCart(Product p, int qty)
{
if (p != null && cart!=null)
{
cart.Add(p);
}
return cart;
}
答案 1 :(得分:0)
在AddToCart中,名为List<Product>
的{{1}}实例仍为空。可能它应该在构造函数中初始化。您可以保护您对cart
实例代码编写
cart
但是,我想这个方法存在于Cart类中,因此确保产品列表初始化的最佳位置是构造函数
public List<Product> AddToCart(Product p, int qty)
{
if (cart == null)
cart = new List<Product>();
if (p != null)
cart.Add(p);
return cart;
}
作为结局,我可以建议一点点重构。如果可能,请更改该变量的名称。如果一个变量具有相同的类名,只是大小写不同,这是令人困惑的。变量public class Cart
{
private List<Product> cart;
public Cart()
{
cart = new List<Product>();
}
public List<Product> AddToCart(Product p, int qty)
{
if(p != null)
cart.Add(p);
return cart;
}
}
也是不同的类型(cart
)