2016-09-30 5 views
1

Da ich zuerst Datenbank verwende, validiere ich meine Eingaben über ViewModel. Aber ist das gut genug für die Validierung oder gibt es eine ungeschriebene Regel, um es z. im Controller?MVC - Validierung in ViewModel genug?

Auch, was sind am häufigsten für Attribut-Validierung, sagen wir Passwort?

[Required] 
[StringLength(50)] 
[MinLength(3)] 
public string Password { get; set; } 

Ist dies eine gute Bestätigung?

+0

Ich werde glücklich sein, zu korrigieren, aber ich * glaube * diese Attribute werden die HTML dynamisch setzen, so dass die Eingabe zum Beispiel das 'required' Attribut gesetzt haben wird. Aber ich kann mich nicht erinnern, jemals serverseitige Überprüfungen für Sie durchgeführt zu haben. Sie müssten wahrscheinlich auch die Daten in Ihrem Controller bereinigen, was nie eine schlechte Übung ist. –

+0

@DrewKennedy Aah ich sehe. Kennen Sie eine gute Anleitung zum Hinzufügen der Validierung im Controller? – Nyprez

+0

Nicht so sehr eine Anleitung, aber Sie können 'ModelState' immer verwenden, um eine Validierungsprüfung durchzuführen, und' AddModelError', um jedes Problem zu definieren, oder die Eigenschaft verwenden, um die Fehlermeldung zu definieren. [Hier ein gutes Beispiel] (http://stackoverflow.com/a/21911236/4204026). –

Antwort

2

Die Attributvalidierung ist perfekt für was es tun kann. Zusätzlich zu den von Ihnen genannten Validierungsattributen verfügen Sie über das Attribut EmailAddress, mit dem die angegebene Eigenschaft als E-Mail-Adresse validiert wird.

[EmailAddress(ErrorMessage = "Invalid Email Address")] 

Dann Sie das RegulaererAusdruck Validierung Attribut für kompliziertere benutzerdefinierte Validierungen tun:

[RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$", 
     ErrorMessage = "Characters are not allowed.")] 

Für bedingte Validierung und solche Dinge, können Sie diese Logik zu Ihrem Controller hinzufügen und fügen Sie Fehler an das Model als erforderlich.

Beispiel:

if (MyProperty == "something" && MyOtherProperty != "something") 
{ 
    ModelState.AddModelError("", "MyOtherProperty needs to be something") 
} 

Wenn Sie nicht so vorformulierten Validierungscode in der Controller-Logik wollen, können Sie Ihre eigene benutzerdefinierte Validierung Attribute schreiben. Auf diese Weise können Sie praktisch alles validieren, was Ihnen einfällt.

Es gibt viele Ressourcen zu diesem Thema im Internet.

How to create a custom validation attribute?

How to create Custom Data Annotation Validators

nur einige zu nennen.

0

Vergessen Sie nicht, die Gültigkeit von ModelState zu überprüfen, indem Sie ModelState.IsValid aufrufen. Außerdem kann ich mir vorstellen, dass Sie einige zusätzliche Validierungsprüfungen durchführen müssen.

+0

durch zusätzliche Validierung der Datenbank, was meinst du zum Beispiel? – Nyprez

+0

Angenommen, jemand registriert ein Konto. Die von ihm eingegebenen Werte könnten zwar gültig sein, aber Sie möchten dennoch in die Datenbank einchecken, wenn der eingegebene Benutzername nicht bereits vergeben ist. – user1796440

+0

Aah ich sehe! Soll ich das durch den Controller machen? Sagen wir einen 'Username'. Wenn 'Username' bereits in der Datenbank existiert (immer noch über den Controller), werde ich" exist exist "- Fehler zurückgeben. Wenn nicht, wird der 'Benutzername' hinzugefügt. Ist das ein richtiger Weg? – Nyprez