Ajax-Post zu ASP.net MVC-Controller - Objekteigenschaften sind null
Habe ich ein ajax-post konstruiert wie dieser:
var myData = [
{
id: "a",
name: "Name 1"
},
{
id: "b",
name: "Name 2"
}
];
$.ajax({
type: 'POST',
url: '/myurl/myAction',
data: { items: myData },
dataType: 'json',
error: function (err) {
alert("error - " + err);
}
});
Sowie einem MVC-controller:
[HttpPost]
public JsonResult MyAction(MyClass[] items)
{
}
MyClass
ist nur eine einfache Darstellung der Daten:
public class MyClass {
public string Name {get; set; }
public string Id {get; set; }
}
Wenn das javascript macht die post-Anforderung, die controller-Aktion hat in der Tat erhalten, 2 Elemente, jedoch sind die Eigenschaften (id, name) diese Elemente sind null.
Überprüfung der Anfrage in fiddler, der Körper sieht wie folgt aus:
Name | Value
items[0][Name] | Name 1
items[0][Id] | a
items[1][Name] | Name 2
items[1][Id] | b
Habe ich etwas verpasst?
Kommentar zu dem Problem - Öffnen
Nur eine Vermutung, vielleicht ist es, weil die Eigenschaften sind in Kleinbuchstaben javascript und Großbuchstaben in C#.
Nein, das ist es nicht. Der JSON serializer ist nicht case sensitive.
Ein weiteres Szenario, wo Eigenschaften sind null - stackoverflow.com/questions/18124405/...
InformationsquelleAutor der Frage Alex | 2013-05-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, nehmen Sie einen Blick auf die folgende Artikel zu verstehen, den richtigen Draht-format, das Standard-Modell binder rechnet für das binden von Sammlungen. In anderen Worten, für diese zu arbeiten, statt:
Nutzlast sollte so ausgesehen haben:
Leider mit jQuery kann es sehr frustrierend sein, um dies zu erreichen Nutzlast. Aus diesem Grund würde ich empfehlen die Verwendung einer JSON-Nutzlast, wenn Sie senden möchten komplexe Objekte/arrays an den server mit AJAX:
Dinge zu beachten:
data: JSON.stringify({ items: myData })
stattdata: { items: myData }
contentType: 'application/json'
dataType: 'json'
Nun Ihre payload sieht so aus:
InformationsquelleAutor der Antwort Darin Dimitrov
können Sie diesen code verwenden, um das problem zu lösen :
InformationsquelleAutor der Antwort HamidReza