不确定原因,但这一行导致了我的问题:
public void AddToCart(Product product)
{
var cartItem = storeDB.Carts.SingleOrDefault((c.productID) == product.ProductID);
}
我是从控制器调用它。
public ActionResult AddToCart(int productID)
{
var addedProduct = storeDB.Products.Find(productID);
var cart = ShoppingCart.GetCart(this.HttpContent);
cart.AddToCart(addedProduct);
return RedirectToAction("Index");
}
答案 0 :(得分:0)
我猜你的第一个查询storeDB.Products
正在返回一个空值(因为你找不到找到的实体)。随后,addedProduct
为null,并尝试在另一个LINQ语句中引用它,该语句将引发空引用异常。
显然,在您的storeDB
上下文中使用的LINQ语句内的表达式中抛出的空引用异常表现为您获得的“方法需要目标”异常。
尝试检查null
,然后再将其传递给AddToCart
方法并在该LINQ语句中使用它。
public ActionResult AddToCart(int productID)
{
var addedProduct = storeDB.Products.Find(productID);
if (addedProduct == null)
{
// take some appropriate action here
// or possibly throw an exception (can't add a missing product to the cart)
}
var cart = ShoppingCart.GetCart(this.HttpContent);
cart.AddToCart(addedProduct);
return RedirectToAction("Index");
}
此外,您的代码将在首次编辑后无法编译。您需要重新添加c =>
。
var cartItem = storeDB.Carts.SingleOrDefault(c => c.productID == product.ProductID);