Teil 6: Modellüberprüfung mithilfe von Datenanmerkungen

von Jon Galloway

Der MVC Music Store ist eine Tutorialanwendung, die schrittweise erläutert, wie ASP.NET MVC und Visual Studio für die Webentwicklung verwendet werden.

Der MVC Music Store ist eine einfache Beispielspeicherimplementierung, die Musikalben online verkauft und grundlegende Websiteverwaltung, Benutzeranmeldung und Warenkorbfunktionen implementiert.

In dieser Tutorialreihe werden alle Schritte zum Erstellen der ASP.NET MVC Music Store-Beispielanwendung beschrieben. Teil 6 behandelt die Verwendung von Datenanmerkungen für die Modellüberprüfung.

Wir haben ein großes Problem mit unseren Formularen erstellen und bearbeiten: Sie führen keine Validierung durch. Wir können beispielsweise erforderliche Felder leer lassen oder Buchstaben im Feld Price eingeben, und der erste Fehler, den wir sehen, stammt aus der Datenbank.

Wir können unserer Anwendung ganz einfach die Validierung hinzufügen, indem wir unseren Modellklassen Datenanmerkungen hinzufügen. Datenanmerkungen ermöglichen es uns, die Regeln zu beschreiben, die wir auf unsere Modelleigenschaften anwenden möchten, und ASP.NET MVC diese erzwingt und unseren Benutzern entsprechende Nachrichten anzeigt.

Hinzufügen der Validierung zu unseren Albumformularen

Wir verwenden die folgenden Datenanmerkungsattribute:

  • Erforderlich : Gibt an, dass die Eigenschaft ein erforderliches Feld ist.
  • DisplayName : Definiert den Text, der in Formularfeldern und Überprüfungsmeldungen verwendet werden soll.
  • StringLength – Definiert eine maximale Länge für ein Zeichenfolgenfeld
  • Bereich : Gibt einen maximalen und minimalen Wert für ein numerisches Feld an.
  • Binden : Listet Felder auf, die beim Binden von Parameter- oder Formularwerten an Modelleigenschaften ausgeschlossen oder eingeschlossen werden sollen
  • ScaffoldColumn : Ermöglicht das Ausblenden von Feldern in Editorformularen

*Hinweis: Weitere Informationen zur Modellüberprüfung mithilfe von Datenanmerkungsattributen finden Sie in der MSDN-Dokumentation unter *https://go.microsoft.com/fwlink/?LinkId=159063

Öffnen Sie die Album-Klasse, und fügen Sie oben die folgenden using-Anweisungen hinzu.

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

Aktualisieren Sie als Nächstes die Eigenschaften, um Anzeige- und Validierungsattribute wie unten dargestellt hinzuzufügen.

namespace MvcMusicStore.Models
{
    [Bind(Exclude = "AlbumId")]
    public class Album
    {
        [ScaffoldColumn(false)]
        public int      AlbumId    { get; set; }
        [DisplayName("Genre")]
        public int      GenreId    { get; set; }
        [DisplayName("Artist")]
        public int      ArtistId   { get; set; }
        [Required(ErrorMessage = "An Album Title is required")]
        [StringLength(160)]
        public string   Title      { get; set; }
        [Range(0.01, 100.00,
            ErrorMessage = "Price must be between 0.01 and 100.00")]
        public decimal Price       { get; set; }
        [DisplayName("Album Art URL")]
        [StringLength(1024)]
        public string AlbumArtUrl { get; set; }
        public virtual Genre  Genre    { get; set; }
        public virtual Artist Artist   { get; set; }
    }
}

Während wir dort sind, haben wir auch die Genre- und Artist-Eigenschaften in virtuelle Eigenschaften geändert. Dadurch kann Entity Framework sie nach Bedarf lazy laden.

public virtual Genre    Genre       { get; set; }
public virtual Artist   Artist      { get; set; }

Nach dem Hinzufügen dieser Attribute zu unserem Albummodell beginnt der Bildschirm Erstellen und Bearbeiten sofort mit der Überprüfung der Felder und der von uns ausgewählten Anzeigenamen (z. B. Albumart-URL anstelle von AlbumArtUrl). Führen Sie die Anwendung aus, und navigieren Sie zu /StoreManager/Create.

Screenshot des Formulars Erstellen mit den Dropdownlisten Genre und Künstler sowie den Feldern Titel, Preis und Albumart U R L

Als Nächstes brechen wir einige Validierungsregeln. Geben Sie einen Preis von 0 ein, und lassen Sie titel leer. Wenn wir auf die Schaltfläche Erstellen klicken, wird das Formular mit Validierungsfehlermeldungen angezeigt, die zeigen, welche Felder nicht den von uns definierten Validierungsregeln entsprachen.

Screenshot des Formulars

Testen der Client-Side Validierung

Die serverseitige Validierung ist aus Anwendungssicht sehr wichtig, da Benutzer die clientseitige Validierung umgehen können. Webseitenformulare, die nur die serverseitige Validierung implementieren, weisen jedoch drei erhebliche Probleme auf.

  1. Der Benutzer muss warten, bis das Formular veröffentlicht, auf dem Server überprüft und die Antwort an seinen Browser gesendet wird.
  2. Der Benutzer erhält kein sofortiges Feedback, wenn er ein Feld korrigiert, sodass es nun die Validierungsregeln übergibt.
  3. Wir verschwenden Serverressourcen, um Validierungslogik auszuführen, anstatt den Browser des Benutzers zu nutzen.

Glücklicherweise verfügen die ASP.NET MVC 3-Gerüstvorlagen über eine clientseitige Validierung, die keinerlei zusätzlichen Aufwand erfordert.

Das Eingeben eines einzelnen Buchstabens in das Feld Titel erfüllt die Validierungsanforderungen, sodass die Validierungsmeldung sofort entfernt wird.

Screenshot des Formulars