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:
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%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
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
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.
Das Update-Modell wird im Grunde verwendet, um neue Werte in Ihrem bestehenden Modell zu aktualisieren. Sie müssen den Wert nicht explizit zuweisen.
Tags und Links asp.net-mvc c# updatemodel