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 Validierung in einer ASP.NET MVC-Anwendung durchführen. In diesem Tutorial stellt Ihnen Stephen Walther modellieren zustands- und validierungs-HTML-Hilfsprogramme vor.
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 Modellstatus
Sie verwenden den Modellzustand , genauer gesagt 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, dass Sie Ihre Validierungs- oder Datenbanklogik zu einem Controller hinzufü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.
Auflistung 1: Controllers\ProductController.cs
//
// POST: /Product/Create
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude="Id")] Product productToCreate)
{
// Validation logic
if (productToCreate.Name.Trim().Length == 0)
ModelState.AddModelError("Name", "Name is required.");
if (productToCreate.Description.Trim().Length == 0)
ModelState.AddModelError("Description", "Description is required.");
if (productToCreate.UnitsInStock
In Listing 1 werden die Eigenschaften Name, Description und UnitsInStock der Product-Klasse überprüft. Wenn eine dieser Eigenschaften bei einem Validierungstest fehlschlägt, wird dem Modellzustandsverzeichnis (dargestellt durch die ModelState-Eigenschaft der Controller-Klasse) ein Fehler hinzugefügt.
Wenn fehler im Modellzustand vorhanden sind, 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 vorliegen.
Verwenden der Validierungshilfsprogramme
Das ASP.NET MVC-Framework 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 Klasse Product 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 Sie hier, 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.
Auflistung 2: Views\Product\Create.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.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>
<% } %>
<div>
<%=Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
In Listing 2 wird das Html.ValidationSummary()-Hilfsprogramm unmittelbar oberhalb des HTML-Formulars aufgerufen. Dieses Hilfsprogramm wird verwendet, um eine Liste von 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 Validierungshilfsprogrammen 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 ebenfalls geändert wird, wenn ein Validierungsfehler auftritt. Das Html.TextBox()-Hilfsprogramm rendert ein class="input-validation-error"- Attribut, wenn der vom Html.TextBox()-Hilfsprogramm gerenderten Eigenschaft ein Validierungsfehler zugeordnet ist.
Es gibt drei Cascading Stylesheet-Klassen, 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 und damit 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: Vorabbindung von Validierungsfehlern(Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Es gibt tatsächlich zwei Arten von Validierungsfehlermeldungen: die, 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. Anders ausgedrückt: Es gibt Vorabbindungsvalidierungsfehler und Überprüfungsfehler nach der Bindung.
Die Aktion Create(), die vom Produktcontroller in Listing 1 verfügbar gemacht wird, akzeptiert eine instance der Product-Klasse. Die Signatur der Create-Methode sieht wie folgt aus:
public ActionResult Create([Bind(Exclude="Id")] Product productToCreate)
Die Werte der HTML-Formularfelder aus dem Formular Erstellen werden durch einen sogenannten Modellbinder an die productToCreate-Klasse gebunden. Die Standardmodellbindung 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 die Modellbindung dem Modellzustand einen Fehler hinzu.
Die Standardmodellbindung kann auch keine NULL-Werte zu einer Eigenschaft zuweisen, die keine NULL-Werte akzeptiert. Insbesondere kann die Modellbindung der UnitsInStock-Eigenschaft keinen NULL-Wert zuweisen. Der Modellbinder gibt erneut auf und fügt dem Modellzustand eine Fehlermeldung hinzu.
Wenn Sie die Darstellung dieser Vorabbindungs-Fehlermeldungen anpassen möchten, müssen Sie Ressourcenzeichenfolgen für diese Meldungen erstellen.
Zusammenfassung
Das Ziel dieses Tutorials war es, die grundlegenden Mechanismen der Validierung im ASP.NET MVC-Framework zu beschreiben. Sie haben gelernt, wie Sie den Modellzustand und die Validierungs-HTML-Hilfsprogramme verwenden. Wir haben auch die Unterscheidung zwischen Vorbindung und Postbindungsvalidierung besprochen. In anderen Tutorials werden verschiedene Strategien zum Verschieben ihres Validierungscodes aus Ihren Controllern in Ihre Modellklassen erläutert.