我將Json返回到Ajax以更改我的頁面上的某些html。 c#看起來像這樣:使用JsonConvert以SerializeObject變參數
public JsonResult AddToCart(int id, int sizeid, int sizeVal, int catID)
{
Cake C = db.Cakes.Find(id);
List<Item> cart = new List<Item>();
if (Session["cart"] == null)
{
cart.Add(new Item(C, 1, sizeid, sizeVal));
Session["cart"] = cart;
}
else
{
cart = (List<Item>)Session["cart"];
int index = isExisting(id, sizeid);
if (index == -1)
cart.Add(new Item(C, 1, sizeid, sizeVal));
else
cart[index].Quantity++;
Session["cart"] = cart;
}
return Json(JsonConvert.SerializeObject(cart.Select(b => new { b.Cake.Image, b.Cake.Name, b.SizeVal, b.Quantity, b.Cake.CakeDetails.Where(c => c.SizeID == b.Size).FirstOrDefault().Price, b.Cake.CakeID, b.Size }),
Formatting.Indented,
new JsonSerializerSettings { }), JsonRequestBehavior.AllowGet);
}
我有兩類蛋糕是蛋糕和蛋糕。每個尺寸的蛋糕都有兩種尺寸和兩種價格,而紙杯蛋糕沒有尺寸。
當我運行它完美的作品,但是當我在蛋糕上運行它,它給我這個錯誤蛋糕這種方法:
System.NullReferenceException
這是因爲蛋糕沒有b.Size
或c.SizeID
作爲寫在上面的代碼中。
有沒有辦法讓我在cart.Select(b => new { ... })
方法中允許null? 或者我可以把一個if語句或東西在cart.Select(b => new { ... })
我想使用相同的AddToCart方法返回蛋糕和紙杯蛋糕。我怎樣才能做到這一點?
如果寫第一個OrDefault而不是Select我得到的錯誤說:「不能隱式轉換類型'<匿名類型:字符串圖像,字符串名稱,int? SizeVal,int Quantity,double Price,int CakeID,int? Size>'到'bool'「 和 」無法將lambda表達式轉換爲預期的委託類型,因爲塊中的某些返回類型不能隱式轉換爲委託返回類型「 – 6134548