2012-04-06 5 views
1

Ich versuche eine Möglichkeit zu finden, die gesamte Klasse von meinem View zu einem Controller mit Javascript/AJAX zu übergeben.Wie ein komplettes Objekt an einen Controller mit Javasctipt/AJAX in MVC übergeben?

Ich weiß, dass der folgende Ajax-Code verwendet werden kann, um nur die ID zu übergeben, aber kann ich das gesamte Modell weitergeben?

@model User 
    $.ajax(
     { 
      type: "POST", 
      url: "\User\", 
      data: @model.id, 
      success: 
       reloadPage() 
     }); 

sah ich die folgende Lösung bei der Suche: Is there a way to pass a "C#" object to a controller via AJAX?

Kann ich das einfach stattdessen tun? :

@model User 
    $.ajax(
     { 
      type: "POST", 
      url: "\User\", 
      data: @model, 
      success: 
       reloadPage() 
     }); 

Funktioniert das? Wie sicher? Was ist der beste Weg?

Antwort

4

Schauen Sie sich die JavascriptSerializer.Serialize() Methode verbleibenden Dinge takecare der Bindung. So etwas wie folgt aus:

@model User 
$.ajax({ 
    type: "POST", 
    url: "\User\", 
    data: JSON.parse(@(new JavascriptSerializer().Serialize(Model))), 
    success: reloadPage 
}); 

Im Wesentlichen diese serialisiert Ihr Modell zu einem JSON-String, der dann Client-Seite in eine JS-Objekt zurück analysiert wird, die dann in die AJAX-Anforderung übergeben wird. Wenn die Anforderung den Server erreicht, übernimmt die MVC-Modellbindung die Konstruktion einer Instanz des Modells, die auf dem JSON-Objekt basiert.

Beachten Sie, dass JSON.parse in älteren Versionen von IE nicht unterstützt wird. Sie können json2.js erhalten, um die Methode für IE zu shimmen.

+3

Danke. Hier ist der Namespace für diejenigen, die später darauf schauen: System.Web.Script.Serialization.JavaScript Serializer(). Serialize (Modell) – Shenaniganz

+2

Aber serialisiert das nicht nur, was es gibt, wenn die Seite geladen wird und nicht ein erstelltes/aktualisiertes Modell in der Ansicht? – klkitchens

+1

Fall Tippfehler, die Klasse heißt JavaScriptSerializer, mit Kapital S auf Skript. (nicht JavascriptSerializer) – Blizwire

2

Obwohl es nicht am besten Praxis, wenn es keine andere Möglichkeit, diese Daten zu erhalten, dann können Sie die Daten über TempData

Ansicht übergeben:

@{ 
TempData["myModel"] = Model; 
} 

Controller:

var myModel = TempData["myModel"]; 
TempData.Remove("myModel"); 
2

erstellen ein Json-Objekt mit den gleichen Eigenschaften wie das ursprüngliche Objekt. Geben Sie den Json-Objektnamen als Namen des Steuerungsparameters an. Übergeben Sie die Json Objekt Controller Anfrage AJAX

MVC-Modell

+0

Wenn das User-Objekt also zunächst an ein View-Modell übergeben wird, muss es ein JSON-Typ sein? Was ist auf der Empfängerseite, sobald ich es weiter mit dieser Logik von der Ansicht zum nächsten Controller senden? Wird das Framework automatisch von JSON zurück zum Benutzertyp analysieren? – Shenaniganz

+0

Einmal Überprüfen Sie die Antwort dieser Frage [link] (http://stackoverflow.com/questions/560575/asp-net-mvc-how-to-pass-json-object-from-view-to-controller-as-parameter) – Raghuveer

+0

Ok, so scheint es, dass vor MVC3 JSON zu Klassenmodellbindung musste manuell behandelt werden. Jetzt mit MVC3 wird es automatisch behandelt. Schnelle Frage bevor ich es schließe. Ist es möglich, mein Modell in JSON zu konvertieren, wenn ich bereits mit der Ansicht arbeite? Oder muss nur das Modell vom JSON-Typ sein, wenn es zum View-Modell wird? – Shenaniganz

1

versuchen, die serialize mit (jQuery)

zB.

$.ajax({ 
    type: "POST", 
    url: "\User\", 
    data: $(form).serialize(), 
    success: reloadPage() 
}); 
Verwandte Themen