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?

War es hilfreich?

Lösung

Es gibt zwei Fälle:

  1. 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)
        {
    
        }
        ...
    }
    
  2. Sie verwenden bei beiden eine schwache Eingabe dynamic oder FormCollection 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 anrufen TryUpdateModel 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top