MVC-3 AJAX Post, eine Liste mit Objekten gefüllt, aber Objekte, Eigenschaften sind Leer
Ich habe Folgendes problem:
Auf eine Schaltfläche-Klicken Sie auf ich nach ein paar Daten auf dem server.
Mein Action sieht so aus:
public ActionResult Accept(List<MyViewModel> entries)
{
//here entries HAS 2 MyViewModel-Instances in it.
//The entries are not null, but the values of the instances are!
//entries[0].ParamA is null
}
Wo die MyViewModel sieht wie folgt aus:
public class MyViewModel
{
public string ParamA { get; set; }
public string ParamB { get; set; }
}
Und den AJAX-Aufruf ist der folgende:
var myEntries = { entries: [{ ParamA: "A", ParamB: "B" }, { ParamA: "C", ParamB: "D" }] };
$.ajax({
type: 'POST',
url: url,
cache: false,
data: myEntries,
dataType: 'text' });
Was ich schon versucht, das zu tun:
- Geändert Datentyp 'json'
- verwendet: traditionelle: true
- versuchte var myEntries = JSON.stringify(...);
- versuchte var myEntries = { entries : [JSON.stringify({ ... }), JSON.stringify({ ... })] };
- gleiche wie oben, aber mit jQuery.param(..., true);
- Verwendung von IEnumerable oder MyViewModel[] anstelle der Liste.
- Eine BELIEBIGE Kombination der oben
Was mache ich hier falsch?
Danke Ihnen sehr im Voraus für die Hilfe!
BEARBEITEN
Meine (Razor)Sicht nicht von Interesse ist, in diesem moment, wie es hat nichts damit zu tun. Ich bin NICHT mit HTML.TextBoxFor (oder ähnliche) Methoden zum füllen der myEntries-Variable. Es ist tatsächlich gefüllt dynamisch (weil es gibt viele, viele Auflagen).
Zum Wohle der Frage (und meine eigenen Tests), die ich hart codiert die variable. 🙂
- Können Sie post-code Ihrer (Razor)anzeigen?
- Meine Ansicht hat nichts Interessantes. Ich clearified es in meiner Frage. Siehe den EDIT-Abschnitt
- Ich habe die Antwort! Ich poste sobald ich kann (warten 8 Stunden...)
- Was ist die Antwort? 🙂
- Siehe meine Antwort unten. (Kann ich markieren Sie es als angenommen, morgen ;))
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit der Antwort und die Nutzung von
JSON.stringify
Methode klappt es bei mirBekam ich die Antwort!
jQuery kann manchmal verwirrend sein.
Datentyp der parameter ist, der angibt, was Sie wollen, um WIEDER vom server.
contentType ist die paremeter, die angibt, welche Sie AN den server SENDEN.
Also aus dem Beispiel oben funktioniert es, wenn Sie hinzufügen:
contentType: 'application/json; charset=utf-8',
in der AJAX-call.
Nur zur Ergänzung der Antwort, wie man erstellen Sie die Liste, wird die post zurück an den controller. Das ist, weil Sie nicht brauchen, um wickeln Sie den array mit den Namen der Liste. Es sieht hässlich aus und ist nicht beherrschbar über die eingebauten Funktionen. In diesem Beispiel ist hier, um zu zeigen, wie die post zurück, JSON, MVC verstehen und zu interpretieren, als eine Liste. (Aber selbst wenn das Array verpackt ist es noch funktioniert, aber das ist statische Inhalte und schwierig zu verwalten)
Diesem Beispiel verwendet die jQuery sortable-plugin. Ich möchte die post die gesamte Liste Modell wieder mit der neuen Bestell-Indizes speichern in der Datenbank.
Und mein MVC-controller ist so einfach wie ...