Freigeben über


Ausführen einer einfachen Überprüfung (VB)

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:

  1. 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).
  2. Aktivieren Sie im Dialogfeld Ansicht hinzufügen das Kontrollkästchen Erstellen einer stark typisierten Ansicht (siehe Abbildung 2).
  3. Wählen Sie in der Dropdownliste Datenklasse anzeigen die Product-Klasse aus.
  4. Wählen Sie in der Dropdownliste Inhalt anzeigen die Option Erstellen aus.
  5. 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.

Screenshot der Datei

Abbildung 01: Hinzufügen einer Ansicht(Klicken, um ein Bild in voller Größe anzuzeigen)

Screenshot des Dialogfelds Ansicht hinzufügen, in dem angezeigt wird, dass das Kontrollkästchen Stark typisierte Ansicht erstellen ausgefüllt ist.

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.

Screenshot des Fensters

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?

Screenshot des Fensters

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.