Pass JSON, MVC 3 Aktion
Ich versuche zu senden JSON, um ein MVC-Aktion. Was ich will ist das JSON-Objekt und dann Zugriff auf seine Daten. Die Anzahl der JSON-Felder variieren jedes mal, so brauche ich eine Lösung, die alle Fälle behandeln.
Dies ist mein BEITRAG zu meiner Aktion, die Adresse könnte haben 3 Felder oder 20 variiert in den einzelnen post.
Update: ich gehe ein bisschen mehr ins detail. Ich versuche, die LinkedIn API, ich werde an einem JSON, die Aussehen wie das JSON-am Ende dieser Seite : link. Brauche ich eine Aktion erstellt, die akzeptiert, JSON, die schwanken für jede person.
var address =
{
Address: "123 rd",
City: "Far Away",
State: "Over There"
};
$.ajaxSetup({ cache: false });
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/Account/GetDetails/",
data: JSON.stringify(address),
dataType: "json",
success: function () {
alert("Success from JS");
}
});
Dies ist meine Aktion in MVC, muss ich anwenden, um zu nehmen, was JSON-Objekt übergeben wird und auf dessen Felder.
[HttpPost]
public ActionResult GetDetails(object address)
{
//address object comes in as null
@ViewBag.Successs = true;
return View();
}
- Haben Sie versucht, mit einer
FormCollection
statt einerobject
? - Ich habe gerade versucht, mit FormCollection-Adresse, aber es kommt immer noch bei null.
- Sie können meine Lösung [hier][1]. Sauber und einfach [1]: stackoverflow.com/questions/12069171/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass niemand sagen diesem also werde ich versuchen. Habe deinen code wie folgt
Im Allgemeinen, Sie können fügen Sie diese möglichen Eigenschaften in die Klasse der Persönlichen (oder was auch immer Sie es nennen können). Aber laut linkedin-API, benötigen Sie ein tool zum generieren der Daten-Klasse aufgrund seiner Komplexität. Ich denke xsd.exe kann helfen, wenn Sie eine xsd-Datei für das (oder auch die Erstellung von xsd Datei aus xml)
Entfernen
data: JSON.stringify(address)
mitdata: address
Action-Methode
Als Sie gesagt haben, Ihre Daten-Objekt enthalten kann 20 Requisiten, um zu vermeiden, 20 Parameter, die Sie verwenden können, formscollection wie unten
Nicht sicher, ob dies funktionieren wird (nie dies selbst getan), aber Sie könnten versuchen, die folgende Signatur:
Ich bin eigentlich Recht interessiert mich, um zu sehen, was dann passiert. Oder, wie vorgeschlagen, in dem Kommentar von Kristof Claes, verwenden Sie eine
FormCollection
.Zweite, wenn Dinge wie diese passieren, immer prüfen, ob der browser tatsächlich sendet die Daten, die Sie erwartet an den server. IE9 und Chrome unterstützen diese aus der box, ansonsten können Sie ein tool verwenden, wie Fiddler.
BEARBEITEN: habe Gerade versucht, für mich mit einem
dynamic
parameter und das funktioniert nicht.. Der Laufzeit-Typ des Parameters istobject
also alles, was Sie gesendet werden, gehen verloren. Sie würde besserverwenden
FormCollection
.Ich glaube, Sie können ein
FormCollection
für diese.Ist vielleicht nur ein Tippfehler, aber du anrufst
GetDetails
ActionResult, aber doch dein code istLinkedIn
?Müssen Sie wickeln Sie Ihre JSON-Objekt in den Namen des Parameters, den Sie erwarten, in Ihrem action-Methode. So etwas wie dieses:
Dann in deiner action Methode, dies zu tun:
Mein nehmen ist, alle Antworten sind sowas von Recht.
Als Ihre nicht wissen, die Anzahl der Dinge, die Sie versenden, verwenden Sie formcollection auf dem server. Aber auch das entfernen der stringfy aus der ajax-Aufruf. Dies bedeutet, die Daten werden per www-Codierung.
Wenn Sie wnat zu senden, die n-Adresse Objekten, ändern der mvc action-parameter um ein array, von address Objekten, und verwenden Sie stringfy.
Dies ist, wie ich es mache. Ich habe einen MyProject.Modell.Entitäten und ich serialisieren Sie mit [ParamSerializationFilter] - Attribut auf den angegebenen Methode Aktion.
Vollständigen code hier: https://gist.github.com/3b18a58922fdd8d5a963
Du tust zu viel Arbeit! Übergeben Sie den JSON-Literal direkt an den server und Zugriff auf die Elemente über den action-Parameter der Methode, wie diese:
Hinweis: Dies wird nur funktionieren, wenn Sie Ihr action-params benannt sind exakt die gleichen sind wie Ihre JSON-Literal Attribute.
FormCollection
. Sie sind richtig, wenn Sie sagen, dass es unnötig ist für die Transformation der JSO-literal ein string.