Was ist das richtige Verhalten von UpdateModel in ASP.NET MVC?

Ich bin daran interessiert zu wissen, was Sie als "korrektes Verhalten" in Bezug auf das Verhalten betrachten solltenUpdateModel Methode in ASP.NET MVC.

Der Grund, den ich hier frage, ist vielleicht, ob diese Funktionalität "beabsichtigt" ist, jemand könnte klären, warum sie so ist, und vielleicht eine andere Art, sie anders zu nennen, um die gewünschte Funktionalität zu erreichen, die ich mir als die Art und Weise 90 vorstellen würde % der Leute möchten, dass dies funktioniert?

Im Wesentlichen liegt meine Beschwerde im Verhalten des Bindungsprozesses im InnerenUpdateModel.

Angenommen, Sie möchten ein Formular über ein einfaches aktualisierenSave Aktionsmethode, für die die Datenfelder im Formular ein Modell in Ihrer Datenbank widerspiegeln. Um die Anforderung zunächst zu speichern, wird möglicherweise das vorhandene Modell aus der Datenbank abgerufen. Anschließend werden relevante Felder aktualisiert, die geändert und über gesendet wurdenFormCollection und dann aktualisiert vonUpdateModel zu unserem bestehenden Modell. Diese Funktion scheint jedoch, dass alle vorhandenen Eigenschaften für dieses DB-gefüllte Objekt "zurückgesetzt" werden. und damit meine ich, auf null gesetzt zu werden oder Standardeinstellungen zu initialisieren, als ob es ein brandneues Objekt wäre, mit Ausnahme von offensichtlich jenen, die mit denen in der übereinstimmenFormCollection.

Dies ist ein Problem, da alle vorhandenen Eigenschaften des Objekts, die nicht unbedingt im Formular vorhanden sind, wie z. B. untergeordnete Sammlungen oder Objekte, Datumsangaben oder Felder, die nicht zur Benutzeroberfläche gehören, leer sind oder weniger unbrauchbares Objekt, das aufgrund aller fehlenden Daten, einschließlich wahrscheinlich eines Stapels von IDs, die jetzt auf 0 gesetzt sind, nicht in der Datenbank gespeichert werden kann.

Ich glaube, das ist kein wünschenswertes Verhalten, undUpdateModel sollte nur Eigenschaften aktualisieren, in denen es eine Eigenschaft findet, die mit übereinstimmtFormCollection. Dies würde bedeuten, dass alle Ihre vorhandenen Eigenschaften unberührt bleiben, Ihre Aktualisierungen jedoch vorgenommen werden. Aus dem, was bisher abgeleitet wurde, ist dies jedoch offensichtlich nicht der Fall - es scheint, dass es a instanziiertbrandneue Kopie des Objekts aktualisiert die Eigenschaften aus dem Formular und gibt dann das neue Objekt zurück.

Um es in die richtige Perspektive zu rücken: Die einzige Möglichkeit, ein halbkomplexes Formular zu speichern und alle Ihre vorhandenen Objektdaten zu behalten, besteht darin, manuell zu heiratenjeder Eigenschaft mit der entsprechenden Formulareigenschaft, um zu gewährleisten, dass nur Eigenschaften aktualisiert werden, die im Formular vorhanden sind.

Ich vermute,

Diejenigen, die zustimmen, dass dies beabsichtigt ist, ist mein Ansatz, Formen zu heiraten, der beste Weg?Oder wie sind Sie damit umgegangen?

Bitte zögern Sie nicht, Ihre Gedanken über diese Jungs, Danke anzubieten.

Hier ist ein weiteres Beispiel für jemanden, der unter diesem Problem leidet:
Wenn Sie UpdateModel mit einer Sammlung komplexer Datentypen aufrufen, werden alle nicht gebundenen Werte zurückgesetzt.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage