Freigeben über


Überprüfung der Validierungssteuerelemente für Datenanmerkungen (C#)

von Microsoft

Nutzen Sie die Datenanmerkungsmodellbinder, um eine Überprüfung in einer ASP.NET MVC-Anwendung durchzuführen. Erfahren Sie, wie Sie die verschiedenen Typen von Validierungsattributen verwenden und mit ihnen im Microsoft Entity Framework arbeiten.

In diesem Tutorial erfahren Sie, wie Sie die Datenanmerkungsvalidatoren verwenden, um eine Überprüfung in einer ASP.NET MVC-Anwendung durchzuführen. Der Vorteil der Verwendung der Datenanmerkungsvalidatoren besteht darin, dass Sie eine Überprüfung durchführen können, indem Sie einfach ein oder mehrere Attribute – z. B. das Attribut Required oder StringLength – zu einer Klasseneigenschaft hinzufügen.

Es ist wichtig zu verstehen, dass das Datenanmerkungsmodellbinder kein offizieller Teil des Microsoft ASP.NET MVC-Frameworks ist. Obwohl der Datenanmerkungsmodellbinder vom Microsoft ASP.NET MVC-Team erstellt wurde, bietet Microsoft keine offizielle Produktunterstützung für die in diesem Tutorial beschriebene und verwendete Datenanmerkungsmodellbinder an.

Verwenden des Datenanmerkungsmodell-Binders

Um den Datenanmerkungsmodellbinder in einer ASP.NET MVC-Anwendung verwenden zu können, müssen Sie zunächst einen Verweis auf die Microsoft.Web.Mvc.DataAnnotations.dll-Assembly und die System.ComponentModel.DataAnnotations.dll-Assembly hinzufügen. Wählen Sie die Menüoption Projekt und Verweis hinzufügen aus. Klicken Sie als Nächstes auf die Registerkarte Durchsuchen , und navigieren Sie zu dem Speicherort, an dem Sie das Datenanmerkungsmodellbinderbeispiel heruntergeladen (und entpackt) haben (siehe Abbildung 1).

Abbildung der Registerkarte

Abbildung 1: Hinzufügen eines Verweises auf die Datenanmerkungsmodellbinder (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Wählen Sie sowohl die Microsoft.Web.Mvc.DataAnnotations.dll-Assembly als auch die System.ComponentModel.DataAnnotations.dll-Assembly aus, und klicken Sie auf die Schaltfläche OK .

Sie können die System.ComponentModel.DataAnnotations.dll Assembly, die in .NET Framework Service Pack 1 enthalten ist, nicht mit dem Datenanmerkungsmodellbinder verwenden. Sie müssen die Version der System.ComponentModel.DataAnnotations.dll Assembly verwenden, die im Download des Datenanmerkungsmodell-Binder-Beispiels enthalten ist.

Schließlich müssen Sie den DataAnnotations Model Binder in der Datei Global.asax registrieren. Fügen Sie dem Application_Start()-Ereignishandler die folgende Codezeile hinzu, damit die Application_Start()-Methode wie folgt aussieht:

protected void Application_Start()
{
    RegisterRoutes(RouteTable.Routes);
    ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();
}

Diese Codezeile registriert ataAnnotationsModelBinder als Standardmodellbinder für die gesamte ASP.NET MVC-Anwendung.

Verwenden der Datenanmerkungsüberprüfungsattribute

Wenn Sie den Datenanmerkungsmodellbinder verwenden, verwenden Sie Validierungsattribute, um die Überprüfung durchzuführen. Der System.ComponentModel.DataAnnotations-Namespace enthält die folgenden Validierungsattribute:

  • Bereich: Ermöglicht ihnen die Überprüfung, ob der Wert einer Eigenschaft zwischen einem angegebenen Wertebereich liegt.
  • RegularExpression– Ermöglicht Ihnen die Überprüfung, ob der Wert einer Eigenschaft mit einem angegebenen Muster für reguläre Ausdrücke übereinstimmt.
  • Erforderlich: Ermöglicht das Markieren einer Eigenschaft als erforderlich.
  • StringLength: Ermöglicht das Angeben einer maximalen Länge für eine Zeichenfolgeneigenschaft.
  • Validierung: Die Basisklasse für alle Validierungsattribute.

Hinweis

Wenn Ihre Validierungsanforderungen von keinem der Standardvalidatoren erfüllt werden, haben Sie immer die Möglichkeit, ein benutzerdefiniertes Validierungsattribut zu erstellen, indem Sie ein neues Validierungsattribut vom Basisvalidierungsattribut erben.

Die Product-Klasse in Listing 1 veranschaulicht die Verwendung dieser Validierungsattribute. Die Eigenschaften Name, Description und UnitPrice sind als erforderlich gekennzeichnet. Die Name-Eigenschaft muss eine Zeichenfolgenlänge von weniger als 10 Zeichen aufweisen. Schließlich muss die UnitPrice-Eigenschaft einem regulären Ausdrucksmuster entsprechen, das einen Währungsbetrag darstellt.

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace MvcApplication1.Models
{
    
    public class Product
    {
        public int Id { get; set; }

        [Required]
        [StringLength(10)]
        public string Name { get; set; }

        [Required]
        public string Description { get; set; }

        [DisplayName("Price")]
        [RegularExpression(@"^\$?\d+(\.(\d{2}))?$")]
        public decimal UnitPrice { get; set; }
    }
}

Eintrag 1: Models\Product.cs

Die Product-Klasse veranschaulicht, wie ein zusätzliches Attribut verwendet wird: das DisplayName-Attribut. Mit dem DisplayName-Attribut können Sie den Namen der Eigenschaft ändern, wenn die Eigenschaft in einer Fehlermeldung angezeigt wird. Anstatt die Fehlermeldung "Das Feld UnitPrice ist erforderlich" anzuzeigen, können Sie die Fehlermeldung "Das Feld Preis ist erforderlich" anzeigen.

Hinweis

Wenn Sie die von einem Validierungsgeber angezeigte Fehlermeldung vollständig anpassen möchten, können Sie der ErrorMessage-Eigenschaft des Validierungsgebers eine benutzerdefinierte Fehlermeldung wie folgt zuweisen: <Required(ErrorMessage:="This field needs a value!")>

Sie können die Product-Klasse in Listing 1 mit der Controlleraktion Create() in Listing 2 verwenden. Diese Controlleraktion zeigt die Ansicht Erstellen erneut an, wenn der Modellzustand Fehler enthält.

using System.Web.Mvc;
using MvcApplication1.Models;

namespace MvcApplication1.Controllers
{
    public class ProductController : Controller
    {
         //
        // GET: /Product/Create

        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /Product/Create

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create([Bind(Exclude="Id")]Product productToCreate)
        {
            if (!ModelState.IsValid)
                return View();

            // TODO: Add insert logic here
            return RedirectToAction("Index");
        }

    }
}

Eintrag 2: Controller\ProductController.vb

Schließlich können Sie die Ansicht in Listing 3 erstellen, indem Sie mit der rechten Maustaste auf die Aktion Erstellen() klicken und die Menüoption Ansicht hinzufügen auswählen. Erstellen Sie eine stark typisierte Ansicht mit der Product-Klasse als Modellklasse. Wählen Sie in der Dropdownliste Inhalt anzeigen die Option Erstellen aus (siehe Abbildung 2).

Abbildung des Dialogfelds

Abbildung 2: Hinzufügen der Create View

<%@ Page Title="" Language="C#" MasterPageFile="Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.Product>" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Create</h2>

    <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>

    <% using (Html.BeginForm()) {%>

        <fieldset>
            <legend>Fields</legend>
            <p>
                <label for="Name">Name:</label>
                <%= Html.TextBox("Name") %>
                <%= Html.ValidationMessage("Name", "*") %>
            </p>
            <p>
                <label for="Description">Description:</label>
                <%= Html.TextBox("Description") %>
                <%= Html.ValidationMessage("Description", "*") %>
            </p>
            <p>
                <label for="UnitPrice">Price:</label>
                <%= Html.TextBox("UnitPrice") %>
                <%= Html.ValidationMessage("UnitPrice", "*") %>
            </p>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% } %>

    <div>
        <%=Html.ActionLink("Back to List", "Index") %>
    </div>

</asp:Content>

Eintrag 3: Ansichten\Product\Create.aspx

Hinweis

Entfernen Sie das Feld Id aus dem Formular erstellen, das durch die Menüoption Ansicht hinzufügen generiert wurde. Da das Feld Id einer Identitätsspalte entspricht, möchten Sie benutzern nicht erlauben, einen Wert für dieses Feld einzugeben.

Wenn Sie das Formular zum Erstellen eines Produkts übermitteln und keine Werte für die erforderlichen Felder eingeben, werden die Validierungsfehlermeldungen in Abbildung 3 angezeigt.

Abbildung aller Validierungsfehler

Abbildung 3: Fehlende erforderliche Felder

Wenn Sie einen ungültigen Währungsbetrag eingeben, wird die Fehlermeldung in Abbildung 4 angezeigt.

Abbildung des Überprüfungsfehlers für ungültige Währungen

Abbildung 4: Ungültiger Währungsbetrag

Verwenden von Datenanmerkungsüberprüfungen mit dem Entity Framework

Wenn Sie das Microsoft Entity Framework zum Generieren Ihrer Datenmodellklassen verwenden, können Sie die Validierungsattribute nicht direkt auf Ihre Klassen anwenden. Da das Entity Framework Designer die Modellklassen generiert, werden alle Änderungen, die Sie an den Modellklassen vornehmen, beim nächsten Ändern der Designer überschrieben.

Wenn Sie die Validatoren mit den vom Entity Framework generierten Klassen verwenden möchten, müssen Sie Metadatenklassen erstellen. Sie wenden die Validierungsatoren auf die Metadatenklasse an, anstatt die Validierungsatoren auf die tatsächliche Klasse anzuwenden.

Stellen Sie sich beispielsweise vor, Sie haben eine Movie-Klasse mit dem Entity Framework erstellt (siehe Abbildung 5). Stellen Sie sich außerdem vor, dass Sie die Eigenschaften Movie Title und Director als Eigenschaften festlegen möchten. In diesem Fall können Sie die Partielle Klasse und Metadatenklasse in Listing 4 erstellen.

Abbildung der Filmklasse

Abbildung 5: Von Entity Framework generierte Filmklasse

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace MvcApplication1.Models
{
    [MetadataType(typeof(MovieMetaData))]
    public partial class Movie
    {
    }

    public class MovieMetaData
    {
        [Required]
        public object Title { get; set; }

        [Required]
        [StringLength(5)]
        public object Director { get; set; }

        [DisplayName("Date Released")]
        [Required]
        public object DateReleased { get; set; }
    }

}

Eintrag 4: Models\Movie.cs

Die Datei in Listing 4 enthält zwei Klassen mit dem Namen Movie und MovieMetaData. Die Movie-Klasse ist eine partielle Klasse. Sie entspricht der partiellen Klasse, die vom Entity Framework generiert wird, das im DataModel enthalten ist. Designer.vb-Datei.

Derzeit unterstützt das .NET Framework keine partiellen Eigenschaften. Daher gibt es keine Möglichkeit, die Validierungsattribute auf die Eigenschaften der Movie-Klasse anzuwenden, die im DataModel definiert sind. Designer.vb-Datei durch Anwenden der Validierungsattribute auf die Eigenschaften der Movie-Klasse, die in der Datei in Listing 4 definiert sind.

Beachten Sie, dass die Movie-Partielle Klasse mit einem MetadataType-Attribut versehen ist, das auf die MovieMetaData-Klasse verweist. Die MovieMetaData-Klasse enthält Proxyeigenschaften für die Eigenschaften der Movie-Klasse.

Die Validierungsattribute werden auf die Eigenschaften der MovieMetaData-Klasse angewendet. Die Eigenschaften Title, Director und DateReleased sind alle als erforderliche Eigenschaften gekennzeichnet. Der Director-Eigenschaft muss eine Zeichenfolge zugewiesen werden, die weniger als 5 Zeichen enthält. Schließlich wird das DisplayName-Attribut auf die DateReleased-Eigenschaft angewendet, um eine Fehlermeldung wie "The Date Released field is required" anstelle des Fehlers "The DateReleased field is required" anzuzeigen.

Hinweis

Beachten Sie, dass die Proxyeigenschaften in der MovieMetaData-Klasse nicht dieselben Typen darstellen müssen wie die entsprechenden Eigenschaften in der Movie-Klasse. Die Director-Eigenschaft ist beispielsweise eine Zeichenfolgeneigenschaft in der Movie-Klasse und eine Objekteigenschaft in der MovieMetaData-Klasse.

Die Seite in Abbildung 6 veranschaulicht die Fehlermeldungen, die zurückgegeben werden, wenn Sie ungültige Werte für die Movie-Eigenschaften eingeben.

Abbildung der Fehlermeldung für ungültige Filmwerte

Abbildung 6: Verwenden von Validierungselementen mit dem Entity Framework (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Zusammenfassung

In diesem Tutorial haben Sie gelernt, wie Sie die Datenanmerkungsmodellbinder nutzen, um eine Überprüfung in einer ASP.NET MVC-Anwendung durchzuführen. Sie haben gelernt, wie Sie die verschiedenen Typen von Validierungsattributen verwenden, z. B. die Attribute Required und StringLength. Sie haben auch gelernt, wie Sie diese Attribute verwenden, wenn Sie mit Dem Microsoft Entity Framework arbeiten.