Serverseitige Validierung

Das ASP.NET MVC2 Framework biete eine einfache Möglichkeit zur Validierung eines Modells: Data Annotations. Mit Attributen wird die Validierung für das Modell definiert. Im MVC2 Framework sind vier Validatoren enthalten: Required, StringLength, Range und RegularExpression. Eine Klasse “Contact” könnte also folgendermaßen annotiert werden.

public class Contact

    [Required(ErrorMessage = "Es muss ein Vorname angegeben werden.")]
    [StringLength(200)]
    public string Vorname { get; set; }

    [Required(ErrorMessage = "Es muss ein Nachname angegeben werden.")]
    public string Nachname { get; set; }

    [Range(0, 69, ErrorMessage = "Mit mehr als 69 Kindern halten sie den Weltrekord. Unwahrscheinlich!")]
    public int Kinder { get; set; }

    [RegularExpression(@"[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}")]
    public string Email { get; set; }
}

Damit kann anschließend das Modell entsprechend der Attributierung validieren und die Fehlermeldungen an den Anwender ausgeben lassen. Zusätzlich kann man noch eigene Meldungen an die View mittels “ModelState.AddModelError(<Eigenschaft>, <Nachricht>)” durchreichen.

[HttpPost()]
public ActionResult Logon(LogonModel model, string returnUrl)
{
    // Validierung des Modells abfragen: “ModelState.IsValid” 
    if (!ModelState.IsValid) return View(model);

    // Alternativ Meldungen für das gesamte Modell ausgeben
    ModelState.AddModelError("", "Deine eingegebenen Daten sind falsch.");
    return View(model);
}

Benutzerdefinierte serverseitige Validierung

Diese vier Validatoren decken die häufigsten Fällt ab, leider aber nicht alle. Manchmal kommt man um eine eigene Validierung nicht herum. Dazu sieht das MCV2 Framework die Basisklasse “ValidationAttribute” vor. Erbt eine Klasse von dem ValidationAttribute kann die Methoden “IsValid” überschrieben werden. In dieser Methode wird die Validierungslogik implementiert. Hier ist ein kleines Beispiel für eine Validierung, welches die Komplexität eines Kennworts prüft (mindestens ein Buchstabe groß geschrieben).

    public class ComplexPasswordAttribute : ValidationAttribute
    {
        private readonly bool _capitalLetterRequired = true;

        public ComplexPasswordAttribute(bool capitalLetterRequired)
        {
            _capitalLetterRequired = capitalLetterRequired;
        }

        public override bool IsValid(object value)
        {
            if (value == null) return false;
            var valueString = value.ToString();

            if (_capitalLetterRequired)
                if (valueString.ToLower() == valueString)
                    return false;

            return true;
        }
    }

Der Validator kann nun wie die anderen Attribute verwendet werden. Das MVC2 Framework ruft automatisch die “IsValid()” Methode auf und gibt bei einem negativen Ergebnis die Fehlermeldung “ErrorMessage” an die View weiter.

public class LoginData


    [Required()]

    public string LoginName { get; set; }

    [ComplexPassword(true, ErrorMessage=”Kennwort ist zu einfach”)]

    public string Password { get; set; }

}