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);
}
私はカップケーキとケーキの2種類のケーキを持っています。ケーキは、サイズごとに2つのサイズと2つの価格がありますが、カップケーキはサイズがありません。
私はそれが完璧に動作しますが、私はカップケーキの上にそれを実行すると、それは私に、このエラーを与えるケーキの上に、この方法を実行します。
System.NullReferenceException
カップケーキがb.Size
やc.SizeID
などを持っていないためです上記のコードで書かれています。
cart.Select(b => new { ... })
メソッドでnullを許可する方法はありますか? またはif文や何かを入れてもいいですか?cart.Select(b => new { ... })
返すケーキやカップケーキと同じAddToCartメソッドを使いたいと思います。これどうやってするの?
OrDefaultはSelectの代わりにエラーが表示されます: "暗黙的に型を変換できません '<匿名型:string Image、string Name、int? SizeVal、int量、倍精度価格、int CakeID、int? Size> '' to 'bool' " と "ブロックの戻り値の型の一部が代理返り値の型に暗黙的に変換できないため、ラムダ式を目的のデリゲートの型に変換できません " – 6134548