Exemplarische Vorgehensweise: Validieren der Benutzereingabe in einer Web Forms-Seite
Aktualisiert: November 2007
In dieser exemplarischen Vorgehensweise wird veranschaulicht, wie ASP.NET-Validierungssteuerelemente zum Überprüfen von Benutzereingaben auf einer Webseite verwendet werden. Dabei werden einige Steuerelemente verwendet, die sämtliche Überprüfungen automatisch ausführen und keinen Code erfordern. Zudem wird ein benutzerdefiniertes Validierungssteuerelement mit selbst geschriebenem Code erstellt. Damit wird veranschaulicht, wie Sie dem Validierungsframework auf der Seite Ihre eigene Logik hinzufügen können. Schließlich wird erläutert, wie Sie Benutzereingaben unter bestimmten Bedingungen überprüfen können, die von der durch den Benutzer auf einer Seite getroffenen Auswahl abhängen.
In der exemplarischen Vorgehensweise erstellen Sie eine Seite für eine Website, mit der Besucher eine Reservierung anfordern können. Da der Zweck der exemplarischen Vorgehensweise darin besteht, die Validierung zu veranschaulichen, spielt die Art der Reservierung hier keine Rolle (es könnte sich z. B. um eine Reservierung für ein Restaurant oder für ein Besprechungszimmer handeln), und die Seite wickelt keine tatsächliche Reservierung ab.
Auf der von Ihnen erstellten Seite muss der Benutzer eine E-Mail-Adresse, die Anzahl der Personen für die Reservierung und ein gewünschtes Datum angeben. Außerdem kann er um eine telefonische Bestätigung der Reservierung bitten. (Die Vorgabe für diese Seite, sofern implementiert, stellt eine Bestätigung per E-Mail dar.)
Sicherheitshinweis: |
---|
Die Web Forms-Seite führt standardmäßig eine automatische Validierung durch, um zu verhindern, dass böswillige Benutzer Skripts an die Anwendung senden. Weitere Informationen finden Sie unter Übersicht über Skriptangriffe. |
In dieser exemplarischen Vorgehensweise werden die folgenden Themen behandelt:
Verwenden von Validierungssteuerelementen zum Überprüfen von Benutzereingaben auf einer ASP.NET-Webseite.
Formatieren der Anzeige von Validierungsfehlermeldungen.
Erstellen einer benutzerdefinierten Validierung durch Schreiben von Code.
Vorbereitungsmaßnahmen
Für die Durchführung dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:
- Visual Studio und .NET Framework
Erstellen der Website und der Webseite
Im ersten Teil der exemplarischen Vorgehensweise erstellen Sie eine Website und eine Webseite, auf der Sie mit Formaten arbeiten können.
Wenn Sie bereits eine Website in Visual Studio erstellt haben (z. B. durch Bearbeiten des Themas Exemplarische Vorgehensweise: Erstellen einer einfachen Webseite in Visual Web Developer), können Sie diese Website verwenden und direkt zum Abschnitt "Hinzufügen von Steuerelementen" weiter unten in dieser exemplarischen Vorgehensweise wechseln. Erstellen Sie andernfalls mit den folgenden Schritten eine neue Website und eine neue Webseite.
So erstellen Sie eine Dateisystem-Website
Öffnen Sie Visual Studio.
Klicken Sie im Menü Datei nacheinander auf Neu und auf Website.
Das Dialogfeld Neue Website wird angezeigt.
Klicken Sie in der Liste Sprachen auf die Programmiersprache, in der Sie arbeiten möchten.
Die ausgewählte Programmiersprache wird zur Standardsprache für die Website. Sie können jedoch die Programmiersprache für jede Seite einzeln festlegen.
Klicken Sie unter Von Visual Studio installierte Vorlagen auf ASP.NET-Website.
Geben Sie im Feld Speicherort den Namen des Ordners ein, in dem die Seiten der Website gespeichert werden sollen.
Geben Sie z. B. den Ordnernamen C:\WebSites ein.
Klicken Sie auf OK.
Visual Studio erstellt den Ordner und die neue Seite Default.aspx.
Hinzufügen von Steuerelementen
Sie verwenden nur einige Steuerelemente zum Anfordern der für die Reservierung erforderlichen Informationen vom Benutzer.
So fügen Sie Steuerelemente und Text hinzu
Wechseln Sie in die Entwurfsansicht.
Geben Sie eine Seitenüberschrift ein, z. B. Reservierung senden.
Ziehen Sie die folgenden Steuerelemente aus der Gruppe Standard der Toolbox auf die Seite, und legen Sie ihre Eigenschaften wie folgt fest:
Steuerelement
Eigenschaften
ID: textEmail
ID: textNumberInParty
ID: textPreferredDate
ID: buttonSubmit
Text: Submit Request
ValidationGroup: AllValidators
ID: labelMessage
Text: (leer)
Hinweis: Das genaue Layout der Seite ist nicht wichtig.
Geben Sie vor den Textfeldern Text für Beschriftungen ein.
Doppelklicken Sie auf die Schaltfläche Submit Request, um einen Handler für das Click-Ereignis der Schaltfläche zu erstellen, und fügen Sie dann den folgenden hervorgehobenen Code hinzu:
Protected Sub buttonSubmit_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) If Page.IsValid Then labelMessage.Text = "Your reservation has been processed." End If End Sub
protected void buttonSubmit_Click(object sender, EventArgs e) { if (Page.IsValid) { labelMessage.Text = "Your reservation has been processed."; } }
Der Schaltflächenhandler zeigt lediglich eine Meldung an, führt jedoch keine tatsächliche Verarbeitung aus. Das Anzeigen der Meldung ermöglicht es Ihnen jedoch, später in der exemplarischen Vorgehensweise die Auswirkungen der Validierung zu testen.
Wechseln Sie in die Entwurfsansicht, doppelklicken Sie auf einen leeren Bereich der Seite, um einen Page_Load-Handler zu erstellen, und fügen Sie anschließend folgenden hervorgehobenen Code hinzu:
Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As EventArgs) labelMessage.Text = "" End Sub
protected void Page_Load(object sender, EventArgs e) { labelMessage.Text = ""; }
Durch diesen Code wird die von der Seite angezeigte Meldung gelöscht, wenn die gesamte Validierung erfolgreich war. Der Code unterstützt den Testvorgang später in der exemplarischen Vorgehensweise.
Hinzufügen der Basisvalidierung
Für das fiktive Reservierungssystem können Sie die folgenden Validierungstests ausführen:
Die Angabe der E-Mail-Adresse ist erforderlich, und sie muss korrekt formatiert sein, z. B. someone@example.com. (Im Allgemeinen empfiehlt es sich nicht, zu überprüfen, ob eine E-Mail-Adresse tatsächlich die Adresse einer Person darstellt. Sie können jedoch überprüfen, ob die Adresse dem üblichen Muster für E-Mail-Adressen entspricht.)
Die Angabe der Anzahl von Personen ist ebenfalls erforderlich, und sie muss numerisch sein.
Das gewünschte Datum muss angegeben werden.
Sie können die gesamte Validierung mit Validierungssteuerelementen hinzufügen, die sämtliche Überprüfungen ausführen und Fehler automatisch anzeigen.
Hinweis: |
---|
Zu einem späteren Zeitpunkt in der exemplarischen Vorgehensweise fügen Sie eine weitere Überprüfung hinzu, um sicherzustellen, dass vom Benutzer ein gültiges Datum eingegeben wird. |
So fügen Sie Basisvalidierung hinzu
Wechseln Sie in die Entwurfsansicht. Ziehen Sie ein RequiredFieldValidator-Steuerelement aus der Gruppe Validierung der Toolbox, und legen Sie es neben dem Textfeld textEmail ab.
Legen Sie folgende Eigenschaften für das RequiredFieldValidator-Steuerelement fest:
Eigenschaft
Einstellung
textEmail
Bindet das Validierungssteuerelement an das Textfeld, dessen Inhalt Sie überprüfen möchten.
Dynamic
Gibt an, dass das Steuerelement nur dann dargestellt wird (und Platz auf der Seite einnimmt), wenn dies zum Anzeigen eines Fehlers erforderlich ist.
E-mail address is required.
Zeigt Text in einer Fehlerzusammenfassung an, die Sie später in der exemplarischen Vorgehensweise konfigurieren.
*
Häufig wird mit einem Sternchen angezeigt, dass ein Feld erforderlich ist. Dieser Text wird nur angezeigt, wenn ein Fehler auftritt.
AllValidators
Validierungssteuerelemente können analog zu Optionsfeldern gruppiert und als Einheit behandelt werden. In dieser exemplarischen Vorgehensweise erfahren Sie später mehr zum Gruppieren von Validierungssteuerelementen.
Sie haben einen Test hinzugefügt, um sicherzustellen, dass der Benutzer eine E-Mail-Adresse eingibt. Das Validierungssteuerelement führt die gesamte Überprüfung und Fehleranzeige aus. Dafür müssen Sie der Seite Code hinzufügen.
Ziehen Sie ein RegularExpressionValidator-Steuerelement aus der Gruppe Validierung der Toolbox, und legen Sie es neben dem soeben hinzugefügten RequiredFieldValidator ab.
Legen Sie folgende Eigenschaften für das RegularExpressionValidator-Steuerelement fest:
Eigenschaft
Einstellung
textEmail
You are again validating the user's entry in the e-mail box.
Dynamic
E-mail addresses must be in the format of name@domain.xyz.
Eine längere Fehlermeldung.
Invalid format!
Eine kurze Fehlermeldung.
AllValidators
Validierungssteuerelemente können analog zu Optionsfeldern gruppiert und als Einheit behandelt werden. In dieser exemplarischen Vorgehensweise erfahren Sie später mehr zum Gruppieren von Validierungssteuerelementen.
Klicken Sie während das RegularExpressionValidator-Steuerelement ausgewählt ist im Eigenschaftenfenster auf die Schaltfläche mit Auslassungszeichen im Feld ValidationExpression.
Reguläre Ausdrücke bilden eine Sprache, die zum Suchen genau definierter Muster in Zeichenfolgen verwendet werden kann. Im RegularExpressionValidator-Steuerelement wird ein regulärer Ausdruck für das gültige Muster definiert – in diesem Fall das Muster für eine gültige E-Mail-Adresse.
Der Regulärausdrucks-Editor enthält eine Liste häufig verwendeter regulärer Ausdrücke, sodass Sie das Validierungssteuerelement verwenden können, ohne die Syntax für reguläre Ausdrücke zu kennen.
Klicken Sie in der Liste Standardausdrücke auf Internet-E-Mail-Adresse.
Der reguläre Ausdruck für eine E-Mail-Adresse wird in das Feld Validierungsausdruck eingegeben.
Klicken Sie auf OK, um das Dialogfeld zu schließen.
Fügen Sie mithilfe der Anweisungen in Schritt 1-3 ein weiteres RequiredFieldValidator-Steuerelement hinzu. Binden Sie es dieses Mal jedoch an das Textfeld textNumberInParty, und legen Sie seine ErrorMessage-Eigenschaft auf Please indicate how many people are in your party fest.
Ziehen Sie ein RangeValidator-Steuerelement aus der Gruppe Validierung der Toolbox, und legen Sie es neben dem soeben hinzugefügten RequiredFieldValidator ab.
Legen Sie folgende Eigenschaften für das RangeValidator-Steuerelement fest:
Eigenschaft
Einstellung
textNumberInParty
Dynamic
Enter a number between 1 and 20 for the number of people in your party.
20
In diesem Fall ein beliebiger, aber hoher Wert.
1
In this application, a reservation requires at least one person.
Enter a number between 1 and 20.
Ganze Zahl
AllValidators
Das RangeValidator-Steuerelement führt zwei Funktionen aus: Es stellt sicher, dass die vom Benutzer eingegebenen Daten numerisch sind, und es überprüft, ob die Zahl zwischen dem angegebenen Mindestwert und dem Höchstwert liegt.
Testen der Seite
Sie können nun die bereits vorhandenen Validierungssteuerelemente testen.
So testen Sie die Basisvalidierung
Drücken Sie STRG+F5, um die Seite auszuführen.
Wenn die Seite im Browser angezeigt wird, klicken Sie auf die Schaltfläche Submit Request.
Es werden mehrere Validierungsfehler angezeigt, da Sie einige Pflichtfelder nicht ausgefüllt haben. Beachten Sie, dass die Validierungsfehler sofort angezeigt werden – die Seite wird nicht übermittelt. Standardmäßig fügen die Validierungssteuerelemente clientseitiges ECMAScript (JavaScript) in die Seite ein, um die Validierungsüberprüfung im Browser auszuführen. Somit erhalten die Benutzer eine unmittelbare Rückmeldung zu Validierungsfehlern. Ohne das Clientskript würde für die Überprüfung auf Validierungsfehler eine Schleife zum Server erforderlich sein, was zuweilen viel Zeit in Anspruch nehmen kann. Tatsächlich können Sie die Seite nicht übermitteln, bevor alle clientseitigen Validierungsüberprüfungen erfolgreich verlaufen sind. (Dieselbe Validierungsüberprüfung wird erneut ausgeführt, wenn die Seite als Sicherheitsvorkehrung übermittelt wird.)
Überprüfen Sie die Validierung für das Textfeld textEmail durch Eingabe einer ungültigen E-Mail-Adresse, und dann erneut durch Eingabe einer gültigen E-Mail-Adresse, z. B. Ihrer eigenen.
Beachten Sie, dass Sie in das Textfeld Number of people in party nur numerische Werte zwischen 1 und 20 eingeben können.
Wenn Sie gültige Werte eingegeben haben, klicken Sie auf die Schaltfläche Submit Request. Wenn die Validierung für alle Steuerelemente erfolgreich verläuft, wird die Meldung Your reservation has been processed angezeigt.
Nachdem Sie bestätigt haben, dass die Validierung wie vorgesehen funktioniert, schließen Sie den Browser.
Wenn die Validierung nicht wie vorgesehen funktioniert, prüfen Sie nochmals, ob Sie alle oben aufgelisteten Eigenschafteneinstellungen vorgenommen haben, und führen Sie die Seite anschließend erneut aus.
Alternative Möglichkeiten zum Anzeigen von Fehlerinformationen
Standardmäßig zeigen Validierungssteuerelemente Fehlertext an Ort und Stelle an, d. h., Sie zeigen den Wert der Text-Eigenschaft des Steuerelements an der Position des Steuerelements auf der Seite an. Bisweilen kann es jedoch sein, dass Fehlerinformationen auf andere Weise angezeigt werden sollen. Mit den ASP.NET-Validierungssteuerelementen stehen Ihnen diese zusätzlichen Optionen zur Verfügung:
Sie können alle Validierungsfehler an einer Stelle zusammenfassen. Dies kann zusätzlich zu oder anstelle des Anzeigens der Fehler an Ort und Stelle erfolgen. Das Anzeigen von Fehlerzusammenfassungen ermöglicht es Ihnen zudem, längere Fehlermeldungen anzuzeigen.
Sie können im Browser eine Popupmeldung mit Fehlerinformationen anzeigen. Diese Option steht nur in Browsern mit aktiviertem Skript zur Verfügung.
Sie können diese beiden Anzeigeoptionen mit dem ValidationSummary-Steuerelement hinzufügen. In diesem Teil der exemplarischen Vorgehensweise fügen Sie der Seite beide Anzeigefeatures hinzu.
So zeigen Sie Validierungsinformationen auf alternative Weise an
Ziehen Sie ein ValidationSummary-Steuerelement aus der Gruppe Validierung der Toolbox auf die Seite.
Legen Sie die ValidationGroup-Eigenschaft des ValidationSummary-Steuerelements auf AllValidators fest.
Führen Sie die Seite aus.
Führen Sie denselben Test aus, der in der exemplarischen Vorgehensweise bereits zuvor ausgeführt wurde.
Für jeden Fehler werden Fehlerinformationen an zwei Stellen angezeigt. Es wird eine kurze Fehlermeldung (der Text-Eigenschaftenwert des Validierungssteuerelements) an der Position des Validierungssteuerelements angezeigt. Die längere Fehlermeldung (der ErrorMessage-Eigenschaftenwert des Steuerelements) wird im ValidationSummary-Steuerelement angezeigt.
Schließen Sie den Browser.
Legen Sie die ShowMessageBox-Eigenschaft des ValidationSummary-Steuerelements auf true fest.
Führen Sie die Seite aus.
Führen Sie dieselben Tests aus.
Dieses Mal führt jeder Fehler zu einer Popupmeldung im Browser.
Schließen Sie den Browser.
Hinzufügen der benutzerdefinierten Validierung zum Überprüfen von Datumseingaben
Die ASP.NET-Validierungssteuerelemente enthalten kein Steuerelement, das automatisch eine Überprüfung auf ein gültiges Datum ausführt. Sie können das CustomValidator-Steuerelement jedoch für diesen Zweck verwenden. Das benutzerdefinierte Validierungssteuerelement ermöglicht es Ihnen, einen eigenen Validierungscode zum Überprüfen aller für Ihre Anwendung erforderlichen Bedingungen zu schreiben. In dieser exemplarischen Vorgehensweise überprüfen Sie mit CustomValidator, ob der vom Benutzer in das Textfeld textPreferredDate eingegebene Wert in einen Datumswert konvertiert werden kann.
Sie fügen zwei Blöcke mit benutzerdefiniertem Validierungscode hinzu. Der erste stellt den benutzerdefinierten Validierungscode dar, der ausgeführt wird, wenn die Seite übermittelt wird. Sie müssen stets über serverseitige Validierungslogik für ein CustomValidator-Steuerelement verfügen. Zudem schreiben Sie ein Clientskript (ECMAScript oder JavaScript), das eine ähnliche Überprüfung im Browser ausführt, sodass der Benutzer eine unmittelbare Rückmeldung erhält.
So führen Sie mithilfe eines CustomValidator-Steuerelements eine Überprüfung auf ein gültiges Datum aus
Ziehen Sie ein CustomValidator-Steuerelement aus der Gruppe Validierung der Toolbox auf die Seite, und positionieren Sie es neben dem Textfeld textPreferredDate.
Legen Sie folgende Eigenschaften für das CustomValidator-Steuerelement fest:
Eigenschaft
Einstellung
textPreferredDate
Dynamic
Enter a date in the format m/d/yyyy.
Invalid date format (requires m/d/yyyy).
AllValidators
Doppelklicken Sie auf das CustomValidator-Steuerelement, um einen Handler für das ServerValidate-Ereignis des Steuerelements zu erstellen, und fügen Sie dann den folgenden hervorgehobenen Code hinzu:
Protected Sub CustomValidator1_ServerValidate( _ ByVal source As Object, _ ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Try DateTime.ParseExact(args.Value, "d", _ System.Globalization.DateTimeFormatInfo.InvariantInfo) args.IsValid = True Catch args.IsValid = False End Try End Sub
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) { try { DateTime.ParseExact(args.Value, "d", System.Globalization.DateTimeFormatInfo.InvariantInfo); args.IsValid = true; } catch { args.IsValid = false; } }
Dieser Code wird ausgeführt, wenn der Benutzer die Seite sendet. Der Code interagiert mithilfe des an den Handler übergebenen ServerValidateEventArgs (args)-Objekts mit dem Validierungssteuerelement. Der vom Benutzer in das Textfeld textPreferredDate eingegebene Wert wird als Value-Eigenschaft des args-Objekts übergeben. Nachdem Sie überprüft haben, ob die Eingabe des Benutzers gültig ist, legen Sie die IsValid-Eigenschaft des args-Objekts auf true oder false fest. Wenn Sie sie auf false festlegen, zeigt das Validierungssteuerelement die entsprechende Fehlermeldung an.
In diesem Beispiel verwendet der Code einen try-catch-Block, um zu bestimmen, ob die Eingabe des Benutzers in ein DateTime-Objekt konvertiert werden kann. Wenn der Benutzer einen ungültigen Wert eingibt (der nicht dem Datum im Format m/t/jjjj entspricht), löst die ParseExact-Methode des DateTime-Objekts eine Ausnahme aus, und der Catch-Block wird ausgeführt.
Hinweis: Der Wert für den provider-Parameter der DateTime.ParseExact-Methode ist kulturunabhängig. Wenn Sie die aktuelle Kultur verwenden müssen, können Sie für provider den Wert null festlegen.
Fügen Sie im Button_Click-Handler folgenden hervorgehobenen Code hinzu:
Protected Sub buttonSubmit_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) If Page.IsValid Then labelMessage.Text = "Your reservation has been processed." Else labelMessage.Text = "Page is not valid."End If End Sub
protected void buttonSubmit_Click(object sender, EventArgs e) { if(Page.IsValid) { labelMessage.Text = "Your reservation has been processed."; } else { labelMessage.Text = "Page is not valid."; } }
Wenn Sie ein CustomValidator-Steuerelement verwenden, müssen Sie die Page.IsValid-Eigenschaft bei jeder serverseitigen Verarbeitung überprüfen, um sicherzustellen, dass alle Validierungsüberprüfungen erfolgreich verlaufen sind. Die IsValid-Eigenschaft gibt den kumulativen Zustand aller Validierungssteuerelemente auf der Seite zurück. Mit dieser Eigenschaft wird sichergestellt, dass alle Validierungsüberprüfungen alle serverseitigen Verarbeitungen durchlaufen haben.
Sie haben nun den serverseitigen Code für das CustomValidator-Steuerelement hinzugefügt, um ein Datum auf Gültigkeit zu überprüfen. Wie Sie bereits zuvor in der exemplarischen Vorgehensweise erfahren haben, überprüfen Validierungssteuerelemente die Eingabe eines Benutzers auch mithilfe eines Clientskripts. Sie können auch dem CustomValidator-Steuerelement ein Clientskript hinzufügen. Im Prinzip schreiben Sie ein Clientskript, das die Logik dupliziert, die von der serverseitigen Validierung ausgeführt wird. Das Schreiben von clientseitigem, benutzerdefiniertem Validierungscode ist nicht immer zweckmäßig (z. B. wenn der benutzerdefinierte Code die Eingabe eines Benutzers durch Recherche in einer serverseitigen Datenbank überprüft). In diesem Fall können Sie jedoch clientseitigen Code erstellen, der im Grunde dieselbe Überprüfung ausführt, die gegenwärtig vom serverseitigen Code ausgeführt wird.
So fügen Sie dem CustomValidator-Steuerelement ein Clientskript hinzu
Öffnen Sie Default.aspx, oder wechseln Sie zu Default.aspx.
Fügen Sie im <head>-Element der Seite den folgenden Clientskriptblock hinzu:
<script language="javascript"> function validateDate(oSrc, args) { var iDay, iMonth, iYear; var arrValues; arrValues = args.Value.split("/"); iMonth = arrValues[0]; iDay = arrValues[1]; iYear = arrValues[2]; var testDate = new Date(iYear, iMonth - 1, iDay); if ((testDate.getDate() != iDay) || (testDate.getMonth() != iMonth - 1) || (testDate.getFullYear() != iYear)) { args.IsValid = false; return; } return true; }</script>
Hinweis: Für ECMAScript (JavaScript) muss die Groß-/Kleinschreibung berücksichtigt werden. Geben Sie den Code genau so ein, wie er hier angezeigt wird.
Dieser Code ist mit der serverseitigen Validierungsüberprüfung vergleichbar, die jedoch strikter ist. Die Eingabe des Benutzers wird an die Funktion als Value-Eigenschaft des args-Objekts übergeben, und Sie können die IsValid-Eigenschaft des Objekts so festlegen, dass sie angibt, ob die Validierung des Werts erfolgreich war. In diesem Beispiel überprüft der Code, ob gültige numerische Datumsangaben eingegeben wurden.
Beachten Sie, dass sich der Code für die benutzerdefinierte Validierung im Clientskript geringfügig vom Code im Servercode unterscheidet. ECMAScript stellt nicht genau dieselben Funktionen wie .NET Framework bereit. Daher analysiert ECMAScript den eingegebenen Text statt des ParseExact-Codes, den Sie auf dem Server zur Überprüfung des Datums verwenden. Die zwei Validierungsüberprüfungen (Client und Server) sind jedoch ähnlich genug, um die gewünschten Funktionen bereitzustellen.
Platzieren Sie die Einfügemarke im <asp:customvalidator>-Element, um es auszuwählen.
Legen Sie im Eigenschaftenfenster die ClientValidationFunction-Eigenschaft des Steuerelements auf validateDate fest. Dies ist der Name der soeben von Ihnen erstellten ECMAScript-Funktion.
Sie haben nun eine benutzerdefinierte Validierungsüberprüfung hinzugefügt, die sowohl im Clientskript zur sofortigen Überprüfung der Benutzereingaben als auch erneut bei der Übermittlung der Seite an den Server verwendet werden kann.
Testen der benutzerdefinierten Validierung
Sie können nun testen, ob die benutzerdefinierte Validierung wie vorgesehen funktioniert.
So testen Sie die benutzerdefinierte Validierung
Deaktivieren Sie die clientseitige Validierung vorübergehend, indem Sie die EnableClientScript-Eigenschaft des CustomValidator-Steuerelements auf false festlegen.
Drücken Sie STRG+F5, um die Seite auszuführen.
Geben Sie eine E-Mail-Adresse sowie die Anzahl der Teilnehmer ein, sodass die Validierung für diese Felder erfolgreich verläuft.
Geben Sie in das Datumstextfeld eine Zeichenfolge ein, die offensichtlich kein Datum darstellt, und klicken Sie dann auf die Schaltfläche Submit Request.
Die Seite führt einen Roundtrip zum Webserver aus, wo bei der serverseitigen Validierung ein Fehler auftritt. Während des Tests für IsValid treten Fehler auf, und labelMessage besagt, dass die Seite ungültig ist.
Geben Sie einen gültigen Datumswert ein (z. B. 17.11.2005), und klicken Sie auf die Schaltfläche.
Diesmal verläuft die Validierung des Datumswerts erfolgreich, und die im Click-Handler der Schaltfläche erstellte Bestätigungsmeldung wird angezeigt.
Schließen Sie den Browser.
Aktivieren Sie die clientseitige Validierung erneut, indem Sie die EnableClientScript-Eigenschaft des CustomValidator-Steuerelements wieder auf true festlegen.
Führen Sie die Seite erneut aus, und geben Sie für die E-Mail-Adresse und die Anzahl der Teilnehmer gültige Werte ein.
Geben Sie in das Datumstextfeld einen ungültigen Datumswert ein, und drücken Sie dann die TAB-Taste. (Klicken Sie nicht auf die Schaltfläche.)
Sobald das Datumstextfeld den Fokus verliert, wird das clientseitige Validierungsskript ausgeführt, und es wird eine Fehlermeldung angezeigt.
Hinweis: Wenn Sie die Option AutoVervollständigen in Internet Explorer verwenden, wird durch das Auswählen eines Werts aus der AutoVervollständigen-Liste ein Wert in das Textfeld eingegeben, das clientseitige Validierungssteuerelement wird jedoch nicht ausgeführt.
Klicken Sie auf die Schaltfläche Submit Request.
Da bei der clientseitigen Validierung für das Datumstextfeld ein Fehler aufgetreten ist, wird die Seite nicht übermittelt.
Korrigieren Sie den Datumswert, und drücken Sie erneut die TAB-Taste.
Die Fehlermeldung wird nicht mehr angezeigt. Sie können das Formular nun übermitteln.
Hinzufügen von optionalen Steuerelementen mit bedingter Validierung
Im abschließenden Teil der exemplarischen Vorgehensweise fügen Sie dem Reservierungsformular einige optionale Informationen hinzu. Die Benutzer können ein Kontrollkästchen aktivieren, um anzugeben, dass ihre Reservierung telefonisch bestätigt werden soll. Wenn sie diese Möglichkeit nutzen, müssen sie ihre Telefonnummer eingeben. Die Seite enthält daher zwei zusätzliche Steuerelemente: ein Kontrollkästchen und ein Textfeld.
Wie zuvor verwenden Sie die Validierung, um die Benutzereingaben zu überprüfen. Mit einem RequiredFieldValidator-Steuerelement wird sichergestellt, dass die Benutzer eine Telefonnummer eingeben, und mit einem RegularExpressionValidator-Steuerelement wird das Format der Nummer überprüft. Die Telefonnummer ist optional. Sie müssen die Telefonnummer nur überprüfen, wenn der Benutzer das Kontrollkästchen Confirm reservation by phone aktiviert hat. Schreiben Sie daher einen einfachen Code, der die Validierung für die Telefonnummer je nach Zustand des Kontrollkästchens aktiviert oder deaktiviert.
So fügen Sie die bedingte Validierung hinzu
Ziehen Sie ein CheckBox-Steuerelement aus der Gruppe Standard der Toolbox auf die Seite, und legen Sie die folgenden Eigenschaften fest:
Eigenschaft
Einstellung
checkPhoneConfirmation
True
Wenn der Benutzer auf das Kontrollkästchen klickt, führt die Seite einen Roundtrip aus und aktiviert das Textfeld sowie die entsprechende bedingte Validierung.
False
Durch Klicken auf die CheckBox wird die Validierung nicht automatisch ausgeführt.
Confirm reservation by telephone.
Ziehen Sie ein TextBox-Steuerelement auf die Seite, platzieren Sie es unterhalb des CheckBox-Steuerelements, und legen Sie die folgenden Eigenschaften fest:
Eigenschaft
Einstellungen
textPhoneNumber
False
Das Textfeld wird erst aktiviert, wenn der Benutzer auf das Kontrollkästchen klickt.
Geben Sie einen Text wie Telephone number: als Beschriftung neben das Textfeld für die Telefonnummer ein.
Ziehen Sie einen RequiredFieldValidator aus der Gruppe Validierung der Toolbox auf die Seite, und legen Sie die folgenden Eigenschaften fest:
Eigenschaft
Einstellung
validatorRequiredPhoneNumber
Sie haben die ID von Validierungssteuerelementen in der exemplarischen Vorgehensweise zuvor nicht festgelegt. In diesem Fall beziehen Sie sich jedoch auf das Validierungssteuerelement im Code, sodass es hilfreich ist, ihm eine mnemonische ID zuzuweisen.
textPhoneNumber
Dynamic
You must provide a phone number.
*
(leer)
Wenn diese Eigenschaft leer ist, gehört das Validierungssteuerelement nicht zur Gruppe AllValidators, die Sie für die anderen Validierungssteuerelemente auf der Seite erstellt haben. Daraus folgt, dass dieses Validierungssteuerelement in der Standardeinstellung nicht aktiviert ist, wenn auf das buttonSubmit-Steuerelement geklickt wird.
Ziehen Sie ein RegularExpressionValidator-Steuerelement auf die Seite, und legen Sie die folgenden Eigenschaften fest:
Eigenschaft
Einstellung
validatorRegExPhoneNumber
textPhoneNumber
Dynamic
Phone number format is invalid
Invalid format
(Wählen Sie mithilfe des Dialogfelds Regulärausdrucks-Editor die Option Rufnummer in USA oder einen anderen Telefonnummernausdruck aus.)
(leer)
Doppelklicken Sie auf das checkPhoneConfirmation-Steuerelement, um einen Handler für das CheckedChanged-Ereignis des Steuerelements zu erstellen, und fügen Sie dann den folgenden hervorgehobenen Code hinzu:
Protected Sub checkPhoneConfirmation_CheckedChanged( _ ByVal sender As Object, _ ByVal e As System.EventArgs) If checkPhoneConfirmation.Checked = True Then textPhoneNumber.Enabled = True validatorRequiredPhoneNumber.ValidationGroup = "AllValidators" validatorRegExPhoneNumber.ValidationGroup = "AllValidators" Else textPhoneNumber.Enabled = False validatorRequiredPhoneNumber.ValidationGroup = "" validatorRegExPhoneNumber.ValidationGroup = "" End If End Sub
protected void checkPhoneConfirmation_CheckedChanged( object sender, EventArgs e) { if(checkPhoneConfirmation.Checked) { textPhoneNumber.Enabled = true; validatorRequiredPhoneNumber.ValidationGroup = "AllValidators"; validatorRegExPhoneNumber.ValidationGroup = "AllValidators"; } else { textPhoneNumber.Enabled = false; validatorRequiredPhoneNumber.ValidationGroup = ""; validatorRegExPhoneNumber.ValidationGroup = ""; } }
Wenn der Benutzer auf das Kontrollkästchen klickt, werden die zwei dem Textfeld zugeordneten Validierungssteuerelemente der Validierungsgruppe hinzugefügt, zu der die anderen Validierungssteuerelemente gehören. Dies führt dazu, dass alle Validierungssteuerelemente auf der Seite, einschließlich der Validierungssteuerelemente für die Telefonnummer, aktiviert werden, wenn der Benutzer die Seite übermittelt. Wenn der Benutzer das Kontrollkästchen deaktiviert, werden die Validierungssteuerelemente aus der Gruppe entfernt, und werden daher nicht verarbeitet, wenn auf die Schaltfläche Submit Request geklickt wird.
Testen der bedingten Validierung
Sie können nun testen, ob die bedingte Validierung wie vorgesehen funktioniert.
So testen Sie die bedingte Validierung
Drücken Sie STRG+F5, um die Seite auszuführen.
Geben Sie gültige Informationen für die E-Mail-Adresse, für die Anzahl der Teilnehmer und für das Datum ein.
Klicken Sie auf Submit Request.
Die Seite wird übermittelt, und die Bestätigungsmeldung wird angezeigt.
Aktivieren Sie das Kontrollkästchen Confirm reservation by phone.
Klicken Sie erneut auf Submit Request.
Dieses Mal wird eine Fehlermeldung angezeigt (mit einem Sternchen neben dem Telefontextfeld). Durch das Aktivieren des Kontrollkästchens wurde die Validierung für das Textfeld aktiviert.
Geben Sie eine ungültige Telefonnummer ein, und klicken Sie erneut auf Submit Request, um zu bestätigen, dass das Textfeld keine ungültige Telefonnummer akzeptiert.
Geben Sie eine richtig formatierte Telefonnummer ein, und klicken Sie auf die Schaltfläche Senden, um zu bestätigen, dass das Validierungssteuerelement regelkonforme Daten akzeptiert.
Hinweis: Wenn Sie im Regulärausdrucks-Editor die Option Rufnummer in USA für die ValidationExpression-Eigenschaft des RegularExpressionValidator-Steuerelements ausgewählt haben, besteht eine richtig formatierte Telefonnummer aus der Ortskennzahl (optionales Feld mit 3 numerischen Zeichen in Klammern oder gefolgt von einem Bindestrich), gefolgt von einem Satz von 3 numerischen Zeichen, einem Bindstrich und anschließend einem Satz von 4 numerischen Zeichen. Gültige Beispiele sind (425) 555-0123, 425-555-0123 oder 555-0123.
Nächste Schritte
Die Validierung, die Sie der Web Forms-Seite hinzugefügt haben, beschreibt die grundlegenden Konzepte von Web-Validierungssteuerelementen.
Ein wichtiger Aspekt der Validierung besteht darin, zu verstehen, wie damit die Sicherheit der Website erhöht werden kann. Ausführliche Informationen finden Sie unter Übersicht über Sicherheitsrisiken bei Webanwendungen.