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 Stephen Walther
Erfahren Sie, wie Sie eine Überprüfung in einer ASP.NET MVC-Anwendung durchführen. In diesem Tutorial führt Stephen Walther Sie in die Modellzustände und die HTML-Hilfsprogramme zur Validierung ein.
In diesem Tutorial wird erläutert, wie Sie eine Validierung innerhalb einer ASP.NET MVC-Anwendung durchführen können. Beispielsweise erfahren Sie, wie Sie verhindern können, dass jemand ein Formular übermittelt, das keinen Wert für ein erforderliches Feld enthält. Sie erfahren, wie Sie den Modellzustand und die HTML-Hilfsprogramme für die Validierung verwenden.
Grundlegendes zum Modellzustand
Sie verwenden den Modellzustand oder genauer das Modellzustandswörterbuch, um Validierungsfehler darzustellen. Beispielsweise überprüft die Create()-Aktion in Listing 1 die Eigenschaften einer Product-Klasse, bevor die Product-Klasse einer Datenbank hinzugefügt wird.
Ich empfehle nicht, ihre Validierungs- oder Datenbanklogik einem Controller hinzuzufügen. Ein Controller sollte nur Logik enthalten, die sich auf die Steuerung des Anwendungsflusses bezieht. Wir nehmen eine Abkürzung, um die Dinge einfach zu halten.
Eintrag 1: Controller\ProductController.vb
'
' POST: /Product/Create
<AcceptVerbs(HttpVerbs.Post)> _
Public Function Create(<Bind(Exclude:="Id")> ByVal productToCreate As Product) As ActionResult
' Validation logic
If productToCreate.Name.Trim().Length = 0 Then
ModelState.AddModelError("Name", "Name is required.")
End If
If productToCreate.Description.Trim().Length = 0 Then
ModelState.AddModelError("Description", "Description is required.")
End If
If productToCreate.UnitsInStock
In Listing 1 werden die Eigenschaften Name, Description und UnitsInStock der Product-Klasse überprüft. Wenn eine dieser Eigenschaften bei einem Überprüfungstest fehlschlägt, wird dem Modellzustandswörterbuch (dargestellt durch die ModelState-Eigenschaft der Controller-Klasse) ein Fehler hinzugefügt.
Wenn im Modellzustand Fehler auftreten, gibt die ModelState.IsValid-Eigenschaft false zurück. In diesem Fall wird das HTML-Formular zum Erstellen eines neuen Produkts erneut angezeigt. Andernfalls wird das neue Produkt der Datenbank hinzugefügt, wenn keine Validierungsfehler auftreten.
Verwenden der Validierungshilfsprogramme
Das ASP.NET MVC-Frameworks enthält zwei Validierungshilfsprogramme: das Html.ValidationMessage()-Hilfsprogramm und das Html.ValidationSummary()-Hilfsprogramm. Sie verwenden diese beiden Hilfsprogramme in einer Ansicht, um Validierungsfehlermeldungen anzuzeigen.
Die Hilfsprogramme Html.ValidationMessage() und Html.ValidationSummary() werden in den Ansichten Erstellen und Bearbeiten verwendet, die automatisch vom ASP.NET MVC-Gerüst generiert werden. Führen Sie die folgenden Schritte aus, um die Ansicht Erstellen zu generieren:
- Klicken Sie im Produktcontroller mit der rechten Maustaste auf die Aktion Create(), und wählen Sie die Menüoption Ansicht hinzufügen aus (siehe Abbildung 1).
- Aktivieren Sie im Dialogfeld Ansicht hinzufügen das Kontrollkästchen Erstellen einer stark typisierten Ansicht (siehe Abbildung 2).
- Wählen Sie in der Dropdownliste Datenklasse anzeigen die Product-Klasse aus.
- Wählen Sie in der Dropdownliste Inhalt anzeigen die Option Erstellen aus.
- Klicken Sie auf die Schaltfläche Hinzufügen.
Stellen Sie sicher, dass Sie Ihre Anwendung erstellen, bevor Sie eine Ansicht hinzufügen. Andernfalls wird die Liste der Klassen nicht in der Dropdownliste Datenklasse anzeigen angezeigt.
Abbildung 01: Hinzufügen einer Ansicht(Klicken, um ein Bild in voller Größe anzuzeigen)
Abbildung 02: Erstellen einer stark typisierten Ansicht (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Nachdem Sie diese Schritte ausgeführt haben, erhalten Sie die Ansicht Erstellen in Listing 2.
Eintrag 2: Ansichten\Product\Create.aspx
<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of MvcApplication1.Product)" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<title>Create</title>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Create</h2>
<%= Html.ValidationSummary() %>
<% 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="Price">Price:</label>
<%= Html.TextBox("Price") %>
<%= Html.ValidationMessage("Price", "*") %>
</p>
<p>
<label for="UnitsInStock">UnitsInStock:</label>
<%= Html.TextBox("UnitsInStock") %>
<%= Html.ValidationMessage("UnitsInStock", "*") %>
</p>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% End Using %>
<div>
<%=Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
In Listing 2 wird das Html.ValidationSummary()-Hilfsprogramm direkt über dem HTML-Formular aufgerufen. Dieses Hilfsprogramm wird verwendet, um eine Liste mit Validierungsfehlermeldungen anzuzeigen. Das Html.ValidationSummary()-Hilfsprogramm rendert die Fehler in einer Aufzählung.
Das Html.ValidationMessage()-Hilfsprogramm wird neben jedem HTML-Formularfeld aufgerufen. Dieses Hilfsprogramm wird verwendet, um eine Fehlermeldung direkt neben einem Formularfeld anzuzeigen. Im Fall von Listing 2 zeigt das Html.ValidationMessage()-Hilfsprogramm ein Sternchen an, wenn ein Fehler vorliegt.
Die Seite in Abbildung 3 veranschaulicht die Fehlermeldungen, die von den Validierungshilfen gerendert werden, wenn das Formular mit fehlenden Feldern und ungültigen Werten übermittelt wird.
Abbildung 03: Die Mit Problemen übermittelte Ansicht "Erstellen" (Klicken Sie hier, um das bild in voller Größe anzuzeigen)
Beachten Sie, dass die Darstellung der HTML-Eingabefelder auch geändert wird, wenn ein Validierungsfehler auftritt. Das Html.TextBox()-Hilfsprogramm rendert ein class="input-validation-error"- Attribut, wenn ein Validierungsfehler vorhanden ist, der der vom Html.TextBox()-Hilfsprogramm gerenderten Eigenschaft zugeordnet ist.
Es gibt drei kaskadierende Stylesheetklassen, die verwendet werden, um die Darstellung von Validierungsfehlern zu steuern:
- input-validation-error: Wird auf das Eingabetag> angewendet, das <vom Html.TextBox()-Hilfsprogramm gerendert wird.
- field-validation-error: Wird auf das span-Tag> angewendet, das <vom Html.ValidationMessage()-Hilfsprogramm gerendert wird.
- validation-summary-errors: Wird auf das ul-Tag> angewendet, das <vom Html.ValidationSummary()-Hilfsprogramm gerendert wird.
Sie können diese cascading Stylesheet-Klassen ändern und daher die Darstellung der Validierungsfehler ändern, indem Sie die Datei Site.css im Ordner Inhalt ändern.
Hinweis
Die HtmlHelper-Klasse enthält schreibgeschützte statische Eigenschaften zum Abrufen der Namen der validierungsbezogenen CSS-Klassen. Diese statischen Eigenschaften heißen ValidationInputCssClassName, ValidationFieldCssClassName und ValidationSummaryCssClassName.
Prebinding Validation and Postbinding Validation
Wenn Sie das HTML-Formular zum Erstellen eines Produkts übermitteln und einen ungültigen Wert für das Preisfeld und keinen Wert für das Feld UnitsInStock eingeben, werden die Validierungsmeldungen in Abbildung 4 angezeigt. Woher stammen diese Validierungsfehlermeldungen?
Abbildung 04: Prebinding Validation Errors(Click to view full-size image)
Es gibt tatsächlich zwei Arten von Validierungsfehlermeldungen: diejenigen, die generiert werden, bevor die HTML-Formularfelder an eine Klasse gebunden werden, und diejenigen, die generiert werden, nachdem die Formularfelder an die -Klasse gebunden sind. Mit anderen Worten, es gibt Vorabbindungsüberprüfungsfehler und Nachbindung von Validierungsfehlern.
Die vom Produktcontroller in Listing 1 verfügbar gemachte Aktion Create() akzeptiert eine instance der Product-Klasse. Die Signatur der Create-Methode sieht wie folgt aus:
Public Function Create(<Bind(Exclude:="Id")> ByVal productToCreate As Product) As ActionResult
Die Werte der HTML-Formularfelder aus dem Formular Erstellen werden durch einen so genannten Modellbinder an die productToCreate-Klasse gebunden. Der Standardmodellbinder fügt dem Modellzustand automatisch eine Fehlermeldung hinzu, wenn ein Formularfeld nicht an eine Formulareigenschaft gebunden werden kann.
Der Standardmodellbinder kann die Zeichenfolge "apple" nicht an die Price-Eigenschaft der Product-Klasse binden. Sie können einer Dezimaleigenschaft keine Zeichenfolge zuweisen. Daher fügt der Modellbinder dem Modellzustand einen Fehler hinzu.
Der Standardmodellbinder kann auch nicht den Wert Nothing einer Eigenschaft zuweisen, die den Wert Nothing nicht akzeptiert. Insbesondere kann der Modellbinder der UnitsInStock-Eigenschaft nicht den Wert Nothing zuweisen. Erneut gibt der Modellbinder auf und fügt dem Modellzustand eine Fehlermeldung hinzu.
Wenn Sie die Darstellung dieser vorabbindierenden Fehlermeldungen anpassen möchten, müssen Sie Ressourcenzeichenfolgen für diese Nachrichten erstellen.
Zusammenfassung
Das Ziel dieses Tutorials war es, die grundlegenden Mechanismen der Validierung im ASP.NET MVC-Frameworks zu beschreiben. Sie haben gelernt, wie Sie den Modellzustand und die HTML-Hilfsprogramme für die Validierung verwenden. Außerdem wurde die Unterscheidung zwischen vorabbinding und postbinding Validation erläutert. In anderen Tutorials werden verschiedene Strategien zum Verschieben ihres Validierungscodes von Ihren Controllern in Ihre Modellklassen erläutert.