So senden Sie ein Modell in jQuery $.ajax() Post Request an die MVC-Controller-Methode
Lesezeit: 4 Minuten
Ravikiran
Bei einer automatischen Aktualisierung mit dem folgenden Code bin ich davon ausgegangen, dass das Modell automatisch an den Controller gesendet wird, wenn ich einen Post mache:
Das Modell wird jedoch nicht an den Controller übergeben, wenn die Seite mit einer jQuery-AJAX-Anforderung gepostet wird. Wie kann ich das Modell in der AJAX-Anfrage senden?
Bereits beantwortet und es hilft mir … schau mal @
– Binisch Babu
18. Dezember 15 um 9:12 Uhr
Die einfache Antwort (ab MVC 3 vielleicht sogar 2) ist, dass Sie nichts Besonderes tun müssen.
Solange Ihre JSON-Parameter mit dem Modell übereinstimmen, ist MVC intelligent genug, um ein neues Objekt aus den Parametern zu erstellen, die Sie ihm geben. Die Parameter, die nicht vorhanden sind, werden einfach voreingestellt.
Zum Beispiel das Javascript:
var values =
{
"Name": "Chris",
"Color": "Green"
}
$.post("@Url.Action("Update")",values,function(data)
{
// do stuff;
});
Das Model:
public class UserModel
{
public string Name { get;set; }
public string Color { get;set; }
public IEnumerable<string> Contacts { get;set; }
}
Der Controller:
public ActionResult Update(UserModel model)
{
// do something with the model
return Json(new { success = true });
}
Funktioniert dies mit einem Szenario, in dem das Modell benutzerdefinierte Objekte für Teilansichten enthält? wie innerhalb eines Arrays von Werten gibt es eine Eigenschaft "Customer" :{ "Name":"N" , ...}"
– Javidan
16. November 15 um 8:59 Uhr
Wie würden Sie im Ajax-Erfolg auf Kontakte wie Contact.Name, Contact.Phone usw. verweisen?
– JoshYates1980
23. Mai ’17 um 18:30 Uhr
Wenn Sie das VOLLSTÄNDIGE Modell an den Controller senden müssen, muss das Modell zuerst für Ihren Javascript-Code verfügbar sein.
In unserer App machen wir das mit einer Erweiterungsmethode:
public static class JsonExtensions
{
public static string ToJson(this Object obj)
{
return new JavaScriptSerializer().Serialize(obj);
}
}
In der Ansicht verwenden wir es, um das Modell zu rendern:
<script type="javascript">
var model = <%= Model.ToJson() %>
</script>
Anschließend können Sie die Modellvariable an Ihren $.ajax-Aufruf übergeben.
Das ist nett, aber ziemlich nutzlos, wenn Sie das Modell auf der Seite ändern, auf der das Modell gerendert wird, und wenn Sie es auf der Seite ändern (ich denke, das ist auf einer Webseite normal), übergeben Sie ein leeres Modell an die Post-Aktion.
– das Gesetz
19. Juni 14 um 7:00 Uhr
@Laviak Diese Methode scheint gut zu sein, gibt aber in diesem Szenario ein leeres Modell zurück: Ich sende das Formular mit ausgefülltem Modell und im Falle eines Fehlers kehrt das Formular vom Controller zurück. In diesem Fall ist das Modell nicht leer, aber bei Verwendung dieser Methode wird ein leeres Modell an den Controller gesendet. Wie man es repariert?
– Jack
17. Juni 15 um 10:26 Uhr
@theLaw Irgendeine Idee, dieses Problem zu beheben?
– Jack
17. Juni 15 um 10:26 Uhr
Ich habe eine MVC-Seite, die JSON ausgewählter Werte aus einer Gruppe von Optionsfeldern übermittelt.
Ich benutze:
var dataArray = $.makeArray($("input[type=radio]").serializeArray());
Um ein Array aus ihren Namen und Werten zu erstellen. Dann konvertiere ich es in JSON mit:
var json = $.toJSON(dataArray)
und poste es dann mit ajax() von jQuery an den MVC-Controller
Anschließend können Sie den Antwortstream erfassen und in das native C#/VB.net-Objekt deserialisieren und in Ihrem Controller bearbeiten.
Um diesen Prozess auf schöne, wartungsarme Weise zu automatisieren, empfehle ich, diesen Eintrag zu lesen, der den größten Teil der nativen, automatischen JSON-Deserialisierung ziemlich gut beschreibt.
Passen Sie Ihr JSON-Objekt an Ihr Modell an, und der unten verlinkte Prozess sollte die Daten automatisch in Ihren Controller deserialisieren. Bei mir funktioniert es wunderbar.
Ich denke, Sie müssen das Datenattribut explizit übergeben. Eine Möglichkeit, dies zu tun, ist die Verwendung von data = $(‘#your-form-id’).serialize();
Dieser Beitrag kann hilfreich sein. Poste mit jquery und ajax
Bereits beantwortet und es hilft mir … schau mal @
– Binisch Babu
18. Dezember 15 um 9:12 Uhr