Ich möchte dem Benutzer in einem ASP.MVC 3-Eingabeformular einen Fehler anzeigen, der ModelState.AddModelError () verwendet, so dass es das richtige Feld automatisch hervorhebt und den Fehler neben dem bestimmten Feld platziert.
In den meisten Beispielen sehe ich ModelState.AddModelError () und if (ModelState.IsValid) direkt im Controller platziert. Ich möchte jedoch diese Validierungslogik in die Modellklasse verschieben / zentralisieren. Kann ich die Modellklasse auf Modellfehler prüfen lassen und ModelState.AddModelError () füllen?
Aktueller Code:
%Vor%Gewünschter Code:
%Vor%Wenn Sie MVC 3 verwenden, sollten Sie IValidatableObject auschecken Es ist genau das, wonach du suchst.
Scott Gu erwähnt es in seinem MVC3 Intro Blogbeitrag.
Sie können etwas wie dies mit benutzerdefinierten Datenannotationen oder mit RuleViolations machen wie das, was sie im NerdDinner Beispiel gemacht haben.
Vielleicht könnten Sie eine Fehlerschnittstelle wie IErrorHandler erstellen und diese in eine öffentliche Methode namens Validate on you model class übergeben, die eine partielle Klasse annimmt, und Sie können Ihr Datenmodell von Ihren Regeln trennen.
Mit der Schnittstelle können Sie eine Klasse in Ihrem Controller erstellen, die den ModelState-Fehlerhandler umschließt. So könnte die Schnittstelle AddError haben und in diesem metgod tou nur an Ihren lokalen modelstate delegieren.
Ihre Methode könnte also etwa lauten:
%Vor%Sie würden die benutzerdefinierte Validierung über die IValidatableObject-Schnittstelle in Ihrem Modell verwenden.
Wenn Sie den geringsten Code verwenden, ist es ein hackiger Weg, diese Nachricht in Session
von Ihrem View Model
zu stopfen und dann diese Nachricht von Ihrem Controller
hinzuzufügen, zum Beispiel:
Lassen Sie mich wiederholen, dass ich weiß, dass dies eine Art Hacky ist, aber es ist einfach und es erledigt die Aufgabe ...
Tags und Links asp.net-mvc