Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 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 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 3: Fehlende Pflichtfelder
Wenn Sie einen ungültigen Währungsbetrag eingeben, wird die Fehlermeldung in Abbildung 4 angezeigt.
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 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 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.