Frage

Ich mag einen benutzerdefinierten Modelbinder schaffen, die das beschränkte Modell validiert. Ich habe mehrere Beispiele dafür gefunden und es funktioniert, wie es sollte. Aber ich möchte auch in der Lage sein, den Benutzer zurück auf die Seite senden er herkam, wenn Fehler im Modell ist.

Ist das möglich zu tun und gibt es offensichtliche Nebenwirkungen durch dies zu tun?

Was will ich erreichen, dass der Controller immer gültige Befehle bekommt, so brauchte ich nicht für model.IsValid () in der Aktionsmethode zu überprüfen.

War es hilfreich?

Lösung

Was Sie versuchen, sieht gut zu tun, aber es wird nicht funktionieren. Es sind zu viele Einschränkungen.

  1. Normalerweise kann nur Controller entscheiden, wo im Falle eines Fehlers umleiten. Sie können zusätzliche Attribute wie [OnError ( „Aktion“)] verwenden, aber das sieht aus wie Abhilfen.
  2. Formular veröffentlichen nicht alle Daten. Zum Beispiel, Drop-Down-Listen, haben Hilfswerte durch die Steuerung gefüllt werden. Sie können sich wahrscheinlich Aktionsfilter für diesen Einsatz, aber das ist einmal sieht wieder wie ein Hack.

Sie können Setup globalen Aktionsfilter (auf Basis-Controller), die für die Modellfehler überprüfen wird (das Bindemittel Sets) und Redirect (Setup .RESULT). Aber dies ist gewunden und erfordert zu viel extra „Code“ - Attribute, etc., die dann schwer zu verfolgen und zu realer Anwendungslogik zu beziehen. Und es wird zu restriktiv bald (Gesetz der undichte Abstraktion sehen), wenn Sie brauchen nicht nur eine einfache Aktion Name auf Fehler Redirect, etc.

Das sieht viel einfacher, wenn wie dies geschehen:

public ActionResult PostAction(ViewModel data)
{
   if (!ModelState.IsValid)
      return View("GetAction", data.WithDropDownList(repository.GetProducts()));

}

In dem obigen Beispiel Steuerung hat die Kontrolle über den Workflow, so wie es sein sollte. Es hat auch die Freiheit zusätzliche Überprüfung / Setup auszuführen. Sie können noch so viel Infrastruktur wie möglich nutzen - Modell Bindemittel Modelfehler, etc. zur Verfügung -. Aber nur Controller sollte die endgültige Entscheidung über die Ein- und Ausgabe haben

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