dynamisches Modell und ModelState
-
12-11-2019 - |
Frage
Ich habe eine Aktion wie diese:
Update([Bind(Prefix = "CurrentModel")] dynamic edited)
aber wenn ich dynamisch verwende ModelState.IsValid
gibt immer true zurück, sodass es den Anschein hat, als gäbe es keine Validierung für das dynamische Objekt?Wenn nicht, wie kann ich das lösen?
Lösung
Es gibt zwei Fälle:
Sie verwenden Ansichtsmodelle als Aktionsargumente. In diesem Fall weist der Standardmodellbinder automatisch die Eigenschaften zu und legt mögliche Fehler für den Modellstatus fest:
public ActionResult Update([Bind(Prefix = "CurrentModel")] EditViewModel edited) { if (ModelState.IsValid) { } ... }
Sie verwenden bei beiden eine schwache Eingabe
dynamic
oderFormCollection
In diesem Fall wird der Standardmodellbinder nicht aktiviert und führt überhaupt keine Validierung durch, da er nicht in der Lage ist, auf Ihren tatsächlichen Modelltyp zu schließen.In diesem Fall müssen Sie manuell anrufenTryUpdateModel
und geben Sie Ihren Modelltyp an:public ActionResult Update(dynamic edited) { var model = new MyViewModel(); if (!TryUpdateModel(model, "CurrentModel")) { // The model was not valid } ... }
Abschluss:verwenden dynamic
als Aktionsargument in einer Controller-Aktion macht sehr wenig Sinn.