Kann ich ModelState.AddModelError von einer Model-Klasse (anstatt vom Controller) hinzufügen?

8

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%     
Dan Sorensen 21.06.2011, 22:13
quelle

5 Antworten

5

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.

    
Charlino 22.06.2011 00:13
quelle
1

Sie können etwas wie dies mit benutzerdefinierten Datenannotationen oder mit RuleViolations machen wie das, was sie im NerdDinner Beispiel gemacht haben.

    
John Kalberer 21.06.2011 22:33
quelle
0

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%     
dreza 21.06.2011 23:18
quelle
0

Sie würden die benutzerdefinierte Validierung über die IValidatableObject-Schnittstelle in Ihrem Modell verwenden.

Benutzerdefiniertes Validierungsbeispiel

    
Trevor Germain 29.10.2012 17:00
quelle
0

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:

%Vor%

Lassen Sie mich wiederholen, dass ich weiß, dass dies eine Art Hacky ist, aber es ist einfach und es erledigt die Aufgabe ...

    
Serj Sagan 07.05.2014 17:11
quelle

Tags und Links