Ich gebe Json an Ajax zurück, um etwas HTML auf meiner Seite zu ändern. Die C# sieht so aus:Verwenden Sie JsonConvert zu SerializeObject mit variierenden Parametern
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);
}
Ich habe zwei Kategorien von Kuchen, die Cupcakes und Kuchen sind. Die Kuchen haben zwei Größen und zwei Preise für jede Größe, während die Cupcakes keine Größe haben.
Wenn ich laufen diese Methode auf einem Kuchen es funktioniert perfekt, aber wenn ich es auf einem kleinen Kuchen laufen sie geben mir diesen Fehler:
System.NullReferenceException
Das ist, weil die kleinen Kuchen haben keine b.Size
oder eine c.SizeID
als im obigen Code geschrieben.
Gibt es eine Möglichkeit, Null in der cart.Select(b => new { ... })
Methode zu ermöglichen? Oder kann ich eine if-Anweisung oder etwas in die cart.Select(b => new { ... })
Ich möchte die gleiche AddToCart-Methode zurück Kuchen und Cupcakes. Wie kann ich das machen?
Wenn zuerst schreiben OrDefault statt Select Ich erhalte Fehlermeldungen, die sagen: "Typ kann nicht implizit konvertiert werden" 'bis' bool '" und " Kann Lambda-Ausdruck nicht in den beabsichtigten Delegattyp konvertieren, da einige der Rückgabetypen im Block nicht implizit in den Delegate-Rückgabetyp konvertierbar sind " –
6134548