Was macht UpdateModel ()?

8

Was macht UpdateModel() , sowie TryUpdateModel() ? Ich kann anscheinend (auf SO oder im Web) keine klare Erklärung dafür finden, was es tatsächlich tut (in klaren Worten), nur Leute, die Probleme damit haben, es zu benutzen.

VisualStudios Intellisense hilft mir auch nicht. Der Grund, warum ich frage, ist, weil, sagen wir, wenn ich dies in meinem Controller habe:

%Vor%

Aktualisiere ich mein Modell nicht bereits, indem ich vm.BA.StatesTraveledTo festlege? Warum muss ich UpdateModel ausführen? Auch wenn ich tatsächlich folgendes versuche:

%Vor%

Es scheint nichts zu passieren, wenn ich den Wert von ModelState überprüfe (nachdem ich UpdateModel () ausgeführt habe), sehe ich nichts, was anzeigt, dass sich etwas geändert hat. Ich sehe keinen neuen Schlüssel im ModelState-Wörterbuch.

Wirklich verwirrt. Danke!

Bearbeiten:

Veröffentlichen des Quellcodes für die Klassen ViewModel und Model:

%Vor%     
SaltProgrammer 22.12.2011, 06:37
quelle

3 Antworten

5

Was passiert, wenn Sie

schreiben? %Vor%

und wenn Sie in ActionResult prüfen, finden Sie, dass vm Werte enthält, die Sie in der Ansicht veröffentlicht haben. Das liegt daran, dass mvc den Modelbinder anweist, Werte aus verschiedenen Quellen (Formularsammlung, Routenwerte, Querystring usw.) zu extrahieren und die Werte Ihres Modells aufzufüllen. Damit dies jedoch geschieht, müssen Ihre Formularschlüssel mit dem Namen der Eigenschaften in Ihrem Modell übereinstimmen, und wenn dies der Fall ist, wird Ihr Modell korrekt ausgefüllt. Jetzt kommen wir zur eigentlichen Frage: Was macht UpdateModel? Eine einfache Antwort ist nichts anderes als Modellbindung. Der Unterschied ist nur, dass Sie es explizit nennen. Das obige ActionResult kann wie bei UpdateModel

umgeschrieben werden %Vor%

Nun, was nicht durch die automatische Modellbindung gehandhabt wurde, wird auch nicht durch die explizite Modellbindung behandelt, da es nicht das Problem mit dem Modellbinder ist, sondern das Problem mit Ihrem HTML. Bei Modellen mit verschachtelten Ansichten wie der Ihren müssen die Formularfeldnamen sorgfältig erstellt werden, damit sie von mvc korrekt in Ihr Modell eingefügt werden können, ohne dass Sie etwas wie

schreiben müssen %Vor%

und wenn Sie nicht so etwas tun möchten, überprüfen Sie dies Google-Suche

    
Muhammad Adeel Zahid 22.12.2011, 11:08
quelle
2

Hier ist der Quellcode dafür: Ссылка

Es ist ziemlich einfach,

%Vor%

Dies erstellt nur einen ModelBindingContext und bindet ihn. Ich glaube, es passiert bereits standardmäßig, bevor Ihre Aktion aufgerufen wird. Es ist selten, dass Sie es manuell aufrufen müssen.

Nur eine Vermutung hier, aber Sie könnten seltsame Ergebnisse bekommen, weil Sie Dinge auf eine atypische Weise tun. Die Unterschrift Ihrer Aktion:

%Vor%

verwendet ein UserViewModel UND eine FormCollection. Normalerweise machen Leute das eine oder das andere (eigentlich ist FormCollection heutzutage ziemlich selten). Auch hier gehe ich aus dem Gedächtnis, aber ich würde vermuten, dass UpdateModel nichts tut, da diese Werte bereits gebunden sind. Wenn es leer ist, liegt es vielleicht daran, dass FormCollection alle übergebenen Werte empfängt (bindet), und keiner bleibt für die Bindung an das Ansichtsmodell übrig.

    
George Mauer 22.12.2011 06:57
quelle
0

Das Update-Modell wird im Grunde verwendet, um neue Werte in Ihrem bestehenden Modell zu aktualisieren. Sie müssen den Wert nicht explizit zuweisen.

    
satish kumar 22.12.2011 07:00
quelle

Tags und Links