Post JSON-Daten über ein Formular in MVC4
Ich versuche, die POST-ein JSON-Objekt (JSON-freundlich-knockout-Modell, falls das von irgendeiner Relevanz) zu meinem MVC-controller, und der controller Rückkehr eine neue Ansicht. Um dies zu tun, ich sende die Daten mit einem Formular. Das problem ist, dass ich möchte, um die JSON automatisch in ein Modell, wenn der controller erhält.
Wenn ich auf einen AJAX-Aufruf für diese,
var actionModel = new Object();
actionModel.Controls = ko.toJS(self.controls());
var json = JSON.stringify(actionModel);
$.ajax({
url: "MyController/Preview",
type: "POST",
contentType: 'application/json; charset=utf-8',
cache: false,
data: json,
success: function (data) {
}
});
...das JSON-Objekt erfolgreich deserialisiert und umgewandelt in eine Instanz von meine model-Klasse.
public ActionResult Preview(ActionModel actionModel) { ... }
public class ActionModel
{
public List<ControlModel> Controls { get; set; }
}
Wenn ich will, um dies zu tun, mit einer form, die ich verstehe, dass ich das einfügen muss das JSON in ein verstecktes input-Feld, aber die beste, die ich verwalten können, wenn dies zu tun ist, erhalten die Daten als serialisierte string:
@using (Html.BeginForm("Preview", "MyController", FormMethod.Post, new { id = "previewForm" }))
{
<input type="hidden" id="hiddenFieldName" />
}
public ActionResult Preview(string hiddenFieldName) { ... }
Konnte ich nur Deserialisieren es danach, aber ich würde es bevorzugen, wenn MVC konvertieren konnte es für mich so, als würde es mit einem AJAX-Aufruf. Ist das möglich?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angenommen, Sie wollen post-Daten codiert als json über ein Formular und keine XHR, ich glaube nicht, dass es out of the box möglich.
Formen erlauben nicht, dass viele content-Typen. http://www.w3.org/TR/html401/interact/forms.html#form-content-type
Wenn Sie post von json als string, es ist wahrscheinlich möglich, ein Modell zu erstellen Bindemittel, das sieht für strings, die angezeigt werden json und befassen sich mit der Deserialisierung es. Nicht das schönste Ding, vor allem, wenn dies nur für einige einmalige seltsame situation.
Anstelle der manuellen Deserialisierung, können Sie fangen die Formular-post-event-und rekonstruieren Ihre eigene post, hinzufügen der zusätzlichen JSON-Objekt. Hier ist ein Beispiel, die
serializeObject
Methode von dieser Beitrag):