Freigeben über


Überprüfung der Validierungssteuerelemente für Datenanmerkungen (VB)

von Microsoft

Nutzen Sie die Datenanmerkungsmodellbindung, um eine Validierung innerhalb 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 Validierungssteuerelemente für Datenanmerkungen 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 einer Klasseneigenschaft einfach ein oder mehrere Attribute hinzufügen – z. B. das Required- oder StringLength-Attribut.

Es ist wichtig zu verstehen, dass die Datenanmerkungsmodellbindung kein offizieller Bestandteil 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 den in diesem Tutorial beschriebenen und verwendeten Datenanmerkungsmodellbinder an.

Verwenden des Datenanmerkungsmodellbinders

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 des Dialogfelds

Abbildung 1: Hinzufügen eines Verweises auf den 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 in .NET Framework Service Pack 1 enthaltene System.ComponentModel.DataAnnotations.dll Assembly nicht mit dem Datenanmerkungsmodellbinder verwenden. Sie müssen die Version der System.ComponentModel.DataAnnotations.dll Assembly verwenden, die im Download des Datenanmerkungsmodell-Binderbeispiels 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 Sub Application_Start()
    RegisterRoutes(RouteTable.Routes)
    ModelBinders.Binders.DefaultBinder = New Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder()
End Sub

Diese Codezeile registriert dataAnnotationsModelBinder als Standardmodellbindung für die gesamte ASP.NET MVC-Anwendung.

Verwenden der Datenanmerkungsüberprüfungsattribute

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

  • Bereich: Ermöglicht ihnen, zu überprüfen, ob der Wert einer Eigenschaft zwischen einem angegebenen Wertebereich liegt.
  • RegularExpression: Ermöglicht Ihnen zu überprüfen, ob der Wert einer Eigenschaft mit einem angegebenen Muster für reguläre Ausdrücke übereinstimmt.
  • Erforderlich: Ermöglicht es Ihnen, eine Eigenschaft als erforderlich zu markieren.
  • StringLength: Ermöglicht ihnen, eine maximale Länge für eine Zeichenfolgeneigenschaft anzugeben.
  • 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, wie diese Validierungsattribute verwendet werden. 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 mit einem Muster für reguläre Ausdrücke übereinstimmen, das einen Währungsbetrag darstellt.

Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations

Public Class Product

    Private _id As Integer
    Private _name As String
    Private _description As String
    Private _unitPrice As Decimal

    Public Property Id() As Integer
        Get
            Return _id
        End Get
        Set(ByVal value As Integer)
            _id = value
        End Set
    End Property

     _
    Public Property Name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

     _
    Public Property Description() As String
        Get
            Return _description
        End Get
        Set(ByVal value As String)
            _description = value
        End Set
    End Property

     _
    Public Property UnitPrice() As Decimal
        Get
            Return _unitPrice
        End Get
        Set(ByVal value As Decimal)
            _unitPrice = value
        End Set
    End Property

End Class

Auflistung 1: Models\Product.vb

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 "The Price field is required" (Das Feld "Preis ist erforderlich") anzeigen.

Hinweis

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

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

Public Class ProductController
    Inherits System.Web.Mvc.Controller

    '
    ' GET: /Product/Create

    Function Create() As ActionResult
        Return View()
    End Function

    '
    ' POST: /Product/Create

     _
    Function Create( ByVal productToCreate As Product) As ActionResult

        If Not ModelState.IsValid Then
            Return View()
        End If

        Return RedirectToAction("Index")

    End Function

End Class

Auflistung 2: Controllers\ProductController.vb

Schließlich können Sie die Ansicht in Listing 3 erstellen, indem Sie mit der rechten Maustaste auf die Aktion Create() 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 Ansichtsinhalt die Option Erstellen aus (siehe Abbildung 2).

Abbildung des Dialogfelds

Abbildung 2: Hinzufügen der Ansicht "Erstellen"

<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of MvcApplication1.Product)" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>

<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">UnitPrice:</label>
                <%= Html.TextBox("UnitPrice") %>
                <%= Html.ValidationMessage("UnitPrice", "*") %>
            </p>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% End Using %>

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

</asp:Content>

Auflistung 3: Views\Product\Create.aspx

Hinweis

Entfernen Sie das Feld ID aus dem Formular Erstellen, das von der 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 Validierungsfehlermeldungen

Abbildung 3: Fehlende Pflichtfelder

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

Abbildung der Fehlermeldung

Abbildung 4: Ungültiger Währungsbetrag

Verwenden von Datenanmerkungs-Validierungssteuerelementen mit Entity Framework

Wenn Sie das Microsoft Entity Framework verwenden, um Ihre Datenmodellklassen zu generieren, 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, bei der nächsten Änderung im Designer überschrieben.

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

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

Abbildung der Filmklasse

Abbildung 5: Von Entity Framework generierte Movie-Klasse

Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations

 _
Partial Public Class Movie
End Class

Public Class MovieMetaData

    Private _title As Object
    Private _director As Object
    Private _dateReleased As Object

     _
    Public Property Title() As Object
        Get
            Return _title
        End Get
        Set(ByVal value As Object)
            _title = value
        End Set
    End Property

     _
    Public Property Director() As Object
        Get
            Return _director
        End Get
        Set(ByVal value As Object)
            _director = value
        End Set
    End Property

     _
    Public Property DateReleased() As Object
        Get
            Return _dateReleased
        End Get
        Set(ByVal value As Object)
            _dateReleased = value
        End Set
    End Property
End Class

Auflistung 4: Models\Movie.vb

Die Datei in Listing 4 enthält zwei Klassen namens 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 .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 Partielle Movie-Klasse mit einem MetadataType-Attribut versehen ist, das auf die MovieMetaData-Klasse zeigt. 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 Release field is required." anstelle des Fehlers "The DateReleased field is required" (Das DateReleased-Feld ist erforderlich) anzuzeigen.

Hinweis

Beachten Sie, dass die Proxyeigenschaften in der MovieMetaData-Klasse nicht dieselben Typen wie die entsprechenden Eigenschaften in der Movie-Klasse darstellen müssen. 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 Validierungssteuerelementen mit dem Entity Framework (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Zusammenfassung

In diesem Tutorial haben Sie gelernt, wie Sie den Datenanmerkungsmodellbinder nutzen, um eine Überprüfung innerhalb 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. Außerdem haben Sie gelernt, wie Sie diese Attribute bei der Arbeit mit Dem Microsoft Entity Framework verwenden.