2010-11-22 5 views
0

Meine Seite akzeptiert ein Viewmodel auf HttpGet. Wenn ich das Formular abschicke, bindet meine mit HttpPost dekorierte Methode an dieses Modell und alles ist toll ... ich kann die Modelldaten zum Speichern verwenden.Viewmodel nach Postback

Mein Problem ist: Nicht alle Werte aus dem ursprünglichen Modell werden an den Post übergeben, nur die Formularfelder.

Gibt es eine Möglichkeit, das ursprüngliche Modell an die Post-Methode zu übergeben und nur die Eigenschaften zu aktualisieren, die vom Formular aktualisiert wurden?

Ich weiß, dass ich versteckte Felder verwenden kann, um dies zu erreichen, aber das View-Modell ist komplex und hat geschachtelte Klassen, so dass es alles mühselig sein wird. kann ich dies in einem einfacheren Weg erreichen

Thanx

Antwort

1

Nur Werte, die Form Teil des HTML sind, werden auf dem Posten gebunden zurück. Wenn Sie alle Werte aus dem ursprünglichen Modell

  • benötigen, können Sie sie als ausgeblendete Felder einschließen, wenn Sie die Get-Funktion ausführen, die beim Senden an das Modell gebunden wird. oder
  • unter Verwendung der Modell-ID (die ich vermute, ist vorhanden), rufen Sie die DB, um die relevanten Felder zu erhalten und rehydrieren Sie Ihr Objekt.
  • 1

    Sie könnten den JavascriptSerializer verwenden, um zuerst die VM zu serialisieren und sie dann in einem versteckten Feld zu speichern. Sie können das ViewModel dann erneut erstellen, indem Sie das Feld deserialisieren und anschließend die gebuchten Werte aus der Zeichenfolge im ausgeblendeten Feld übernehmen.

    Wenn Sie eine Bindung an die VM herstellen, können Sie zunächst den ursprünglichen Zustand deserialisieren und dann die TryUpdate-Methode des Controllers verwenden, um diese Werte mit den angegebenen Werten zu überschreiben.