Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Einstieg in ASP.NET von Matthias Lohrer
Einstieg in ASP.NET
gp Kapitel Validierung von Anwendereingaben
  gp 7.1 RequiredFieldValidator
    gp 7.1.1 Display-Attribut
    gp 7.1.2 InitialValue-Attribut
    gp 7.1.3 Die Fehlermeldung definieren
  gp 7.2 Das ValidationSummary-Steuerelement
  gp 7.3 Wie das Display-Attribut funktioniert
  gp 7.4 CompareValidator
    gp 7.4.1 Die Eingabe mit einem fixen Wert vergleichen
    gp 7.4.2 Zwei Eingabefelder miteinander vergleichen
    gp 7.4.3 Eine Typüberprüfung vornehmen
  gp 7.5 RangeValidator
  gp 7.6 RegularExpressionValidator
    gp 7.6.1 Reguläre Ausdrücke erstellen
    gp 7.6.2 Eingaben mit regulären Ausdrücken überprüfen
    gp 7.6.3 Konventionen für gültige Passwörter überprüfen
  gp 7.7 CustomValidator
    gp 7.7.1 Serverseitige Überprüfung
    gp 7.7.2 Eine clientseitige Überprüfung ergänzen

Kapitel 7 Validierung von Anwendereingaben

»Bitte geben Sie ein gültiges Datum ein!«
»Bitte überprüfen Sie die E-Mail-Adresse!«
»Das eingegebene Passwort ist ungültig!«

Sobald eine Website dem Besucher nicht nur Informationen anbietet, sondern auch die Eingabe irgendwelcher Daten ermöglicht, stellt sich dem Entwickler die wenig geliebte Aufgabe, die Eingaben des Anwenders auf Vollständigkeit und Korrektheit zu überprüfen. Immer wieder müssen ähnliche Bedingungen geprüft werden:

gp  Bei manchen Feldern muss sichergestellt werden, dass der Anwender überhaupt irgendeine Eingabe macht,
gp  manche Eingaben müssen eine bestimmte Form haben,
gp  manche Eingaben müssen sehr komplizierten Bedingungen gehorchen, damit sie als gültig akzeptiert werden.

Für solche Eingabeüberprüfungen stellt ASP.NET insgesamt sechs verschiedene Validierungssteuerelemente zu Verfügung:

gp  Der RequiredFieldValidator stellt sicher, dass der Anwender in dem zu überprüfenden Feld auf jeden Fall irgendeine Eingabe vornimmt. Er wird häufig mit einem weiteren Validierungssteuerelement kombiniert.
gp  Der CompareValidator vergleicht die Eingabe mit einem fixen Wert oder mit dem Wert eines anderen Steuerelements. Er kann auch Typüberprüfungen vornehmen.
gp  Der RangeValidator testet, ob die Eingabe innerhalb eines bestimmten Bereichs liegt. Hier sind nicht nur Zahlen erlaubt, sondern auch Datumsangaben können beispielsweise mit diesem Steuerelement getestet werden.
gp  Der RegularExpressionValidator arbeitet mit den allseits bekannten regulären Ausdrücken, die einen String daraufhin überprüfen, ob er eine bestimmte Form hat. Bevor Sie jedoch wirklich einen komplizierten regulären Ausdruck verwenden, sollten Sie überprüfen, ob ein anderes Validierungssteuerelement die gewünschte Funktionalität vielleicht einfacher anbietet.
gp  Der CustomValidator bietet sich an, wenn die übrigen Typen nicht zur Aufgabe passen wollen. Über einen CustomValidator können Sie jeden beliebigen .NET-Code einbinden.
gp  Das ValidationSummary-Steuerelement dient nicht dem Erkennen von Fehlern, sondern der zusammenfassenden Darstellung aller Fehler einer Seite. Es kann entweder HTML-Code oder per JavaScript eine Alert-Box erzeugen.

Die Validierung erfolgt immer auf der Serverseite. In Browsern mit ausreichenden DHTML-Fähigkeiten – beim Internet Explorer ist das ab der Version 4.0 der Fall – kann die Validierung zusätzlich auf der Clientseite erfolgen. Die dafür benötigten JavaScript-Routinen erstellt ASP.NET automatisch. Die clientseitige Validierung erfolgt direkt, nachdem der Anwender Daten eingegeben hat. Die serverseitige Validierung erfolgt nach dem Versand des Formulars zum Server. Die serverseitige Validierung können Sie auch gezielt verhindern, indem Sie die CausesValidation-Eigenschaft beispielsweise bei einer Abbrechen-Schaltfläche auf False setzen.

Mit den Validierungssteuerelementen können Sie die Eingaben in den folgenden HTML-Serversteuerelementen und Webserversteuerelementen überprüfen:

gp  E <input type="file" runat="server" >
gp  E <input type="text" runat="server" >
gp  E <input type="password" runat="server">
gp  E <select runat="server">
gp  E <textarea runat="server">
gp  E <asp:DropDownList runat="server">
gp  E <asp:ListBox runat="server">
gp  E <asp:RadioButtonList runat="server">
gp  E <asp:TextBox runat="server">

Sie können ein Steuerelement mit mehreren Validierungssteuerelementen gleichzeitig überprüfen.


Galileo Computing

7.1 RequiredFieldValidator  downtop

Den RequiredFieldValidator haben Sie bereits im einleitenden Crashkurs kurz kennen gelernt. Dieses Steuerelement verwenden Sie für die so genannten Pflichtfelder, die ein Anwender auf jeden Fall ausfüllen muss. Die Datei name02.aspx enthält ein einfaches Beispiel. Der Anwender soll seinen Namen eingeben. Wenn er keinen Namen eingibt, erscheint ein entsprechender Hinweis.

<!-- name02.aspx -->
<%@ Page Language="VB" Debug="True" Strict="True"  %>
<script runat="server">
Sub Page_Load (ByVal Sender As Object, _
               ByVal E As EventArgs)
   If IsPostBack Then
      Page.Validate
      If IsValid Then
         meldung.Text = "Hallo, " & txtName.Value
      End If
   End If
End Sub
</script>
<html><head><title>Begrüßung</title></head>
<body><h1>Begrüßung</h1>
<form runat="server">
Wie heißen Sie? 
<br><br>
<input runat="server" id="txtName" type="text" >
<asp:RequiredFieldValidator 
     id="reqTxtName" 
     ControlToValidate="txtName" 
     Display="dynamic" 
     runat="server">
     Bitte geben Sie hier Ihren Namen ein.
</asp:RequiredFieldValidator> 
<br><br>
<input runat="server" type="submit" value=" OK " >
<br><br>
<asp:Label id="meldung" runat="server" />
</form></body></html>

So funktioniert der Code:

gp  Das Steuerelement, dessen Eingabe Sie überprüfen möchten, muss auf jeden Fall über ein id-Attribut verfügen. In name02.aspx verfügt das input-Steuerelement über das id-Attribut txtName.
gp  Direkt hinter dieses input-Steuerelement fügen Sie das Element asp:RequiredFieldValidator ein. Im Attribut ControlToValidate geben Sie den Namen des Steuerelements an, das überprüft werden soll: ControlToValidate="txtName".
gp  Zwischen das öffnende und das schließende Tag von RequiredFieldValidator schreiben Sie den Text der Fehlermeldung, der erscheinen soll, wenn die Validierung scheitert.
gp  Das Attribut runat="server" ist obligatorisch.
gp  Ein id-Attribut für das RequiredFieldValidator-Element können Sie wahlweise ergänzen.
gp  Mit dem Attribut Display steuern Sie die Darstellungsweise. Zur Auswahl stehen die Optionen None, Static und Dynamic.

Wenn die Validierung scheitert, zeigt das Validierungssteuerelement den Text an, den Sie zwischen dem öffnenden und dem schließenden Tag festgelegt haben.

Wenn die Eingabe des Anwenders führende und/oder abschließende Leerzeichen enthält, werden diese bei der Validierung entfernt. Der Anwender kann den Eingabezwang also nicht dadurch aushebeln, indem er nur Leerzeichen eingibt.


Galileo Computing

7.1.1 Display-Attribut  downtop

Die Fehlermeldung erscheint im Code exakt dort, wo Sie das Element asp:RequiredFieldValidator eingefügt haben. Mit dem Display-Attribut steuern Sie die Darstellungsweise.

Der Defaultwert für das Display-Attribut ist Static. In diesem Fall wird der Text der Fehlermeldung auch dann in den HTML-Code eingefügt, wenn kein Fehler aufgetreten ist, er wird dann aber mit Hilfe von CSS-Angaben unsichtbar formatiert. Der Sinn dieser Vorgehensweise ist layouttechnischer Natur. Auch eine unsichtbar formatierte Fehlermeldung nimmt Platz in Anspruch. Auf diese Weise stellen Sie sicher, dass das Layout in jedem Fall identisch aussieht. Egal, ob die Fehlermeldung gerade sichtbar oder unsichtbar ist, der Text verrutscht nicht.

Wenn Sie den Wert Display=Dynamic verwenden, wird der Text der Meldung nur dann eingefügt, wenn ein Fehler auftritt. In diesem Fall kann das Layout durch den zusätzlich eingefügten Text verändert werden. Die Auswirkungen der unterschiedlichen Werte für das Display-Attribut auf die Seitengestaltung werden in Abschnitt 7.3, wie das Display-Attribut funktioniert, am Beispiel eines komplexeren Formulars durchgespielt.


Attribut Wert
id Eigene ID
ControlToValidate ID des zu überprüfenden Pflichtfelds
InitialValue Als ungültig angesehener Wert
ErrorMessage Nachricht, die im ValidationSummary-Steuerelement dargestellt wird
Text Text der Fehlermeldung. Kann auch zwischen dem Start- und Ende-Tag von asp:RequiredFieldValidator angegeben werden und kann HTML-Code enthalten
ForeColor Farbangabe , z. B. ForeColor="Blue"
BackColor Farbangabe, z. B. BackColor="#FFAA33"
runat server
Display None | Static (Default) | Dynamic
EnableClientScript true|false
Enabled true|false

Tabelle 7.1 Attribute des RequiredFieldValidator-Steuerelements


Galileo Computing

7.1.2 InitialValue-Attribut  downtop

Das Attribut InitialValue ist erklärungsbedürftig. Sie kennen sicherlich diese Eingabefelder, die als Startwert den Hinweis enthalten, was der Anwender in diesem Feld eintragen soll. Ein input-Element lässt sich beispielsweise mit dem Text Ihre E-Mail-Adresse vorbelegen, um dem Anwender mitzuteilen, dass er hier seine E-Mail-Adresse eintragen soll. Der Anwender löscht den vorgegebenen Text und nimmt einen eigenen Eintrag vor. Oft enthalten auch Kombinationsfelder und Listenfelder als ersten Eintrag einen Text wie Wählen Sie hier dieses und jenes aus ... Damit stellt sich die Frage, wie sich dieser Vorgabewert von einem gültigen Wert unterscheiden lässt, den der Anwender eingegeben beziehungsweise selektiert hat. Auf den ersten Blick scheint das RequiredFieldValidator-Steuerelement für diesen Fall nicht mehr auszureichen, denn wenn beispielsweise das Eingabefeld den Text Ihre E-Mail-Adresse enthält, dann ist es ja bereits nicht mehr leer und müsste damit die Validierungs-Prüfung problemlos bestehen können.

Für diesen Fall mit den Startwerten, die selbst aber keine gültigen Eingaben darstellen sollen, gibt es beim RequiredFieldValidator das Attribut InitialValue.

So wird es verwendet:

gp  Tragen Sie bei dem Pflichtfeld mit dem Attribut value den Startwert ein, z. B.
<input type="text" id="txtEMail" runat="server" value="Ihre E-Mail-Adresse">
gp  Den gleichen Wert weisen Sie beim RequiredFieldValidator-Steuerelement dem Attribut InitialValue zu.
gp  Wenn der Anwender dann diesen Vorgabewert nicht verändert, scheitert die Validierung und der Fehler wird angezeigt.

ValidierungRequired01.aspx enthält ein Beispiel mit einer E-Mail-Angabe:

<!-- ValidierungRequired01.aspx -->
<%@ Page Language="VB" Debug="True" Strict="True"  %>
<html><head><title>Validierung mit dem 
RequiredFieldValidator</title></head>
<body>
<form runat="server" id="myForm">
<input type="text" id="txtEMail" runat="server" 
       value="Ihre E-Mail-Adresse">
<asp:RequiredFieldValidator  
     ControlToValidate="txtEMail"  
     runat="server"
     Text="Bitte geben Sie Ihre E-Mail-Adresse ein."
     InitialValue="Ihre E-Mail-Adresse">
</asp:RequiredFieldValidator><br>
<input type="submit" value="OK" >
</form>
</body></html>

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 7.1 Beim RequiredFieldValidator können Sie mit InitialValue einen als ungültig angesehenen Startwert festlegen.

Wenn der Anwender OK anklickt, ohne den voreingestellten Eintrag zu ändern, erscheint die Fehlermeldung.

Der Weisheit letzter Schluss ist diese Lösung aber auch nicht. Wenn der Anwender nämlich den voreingestellten Text lediglich löscht und gar nichts eingibt ... dann besteht diese »Eingabe« die Eingabeüberprüfung! Er darf zwar nicht Ihre E-Mail-Adresse stehen lassen, aber gar nichts einzugeben ist ihm jetzt erlaubt. Der Grund für diese verquere Verhalten ist die Funktionsweise dieses Validierungssteuerelements. Mit dem Attribut InitialValue definieren Sie nicht einen weiteren Wert, der neben dem leeren String als ungültig betrachtet wird, sondern Sie definieren den einzigen Wert, der als ungültig bewert wird. Das RequiredFieldValidator-Steuerlement akzeptiert in der Regel keine leeren Eingaben, weil der Default-Wert von InitialValue String.Empty, der leere String, ist. Wenn Sie diesem Attribut aber den Wert Ihre E-Mail-Adresse zuweisen, dann ist String.Empty auf einmal eben doch ein erlaubter Wert. Es ist nicht möglich, hier gleichzeitig mehrere verbotene Werte zu definieren. Statt InitialValue sollte dieses Attribut also besser TheOnlyOneInvalidValue heißen.

Fazit: Um die beabsichtigte Wirkung zu erzielen, müssen Sie in diesem Fall das RequiredFieldValidator-Steuerlement mit einem weiteren Validierungssteuerelement kombinieren und die Eingabe beispielsweise zusätzlich mit Hilfe eines regulären Ausdrucks überprüfen. Mehr dazu erfahren Sie in Kürze.

InitialValue-Attribut bei einem Listenfeld

Problemlos können Sie das InitialValue-Attribut in Kombination mit einem Auswahlfeld oder einem Listenfeld nutzen. ValidierungRequired02.aspx funktioniert wie erwartet.

<!-- ValidierungRequired02.aspx -->
<%@ Page Language="VB" Debug="True" Strict="True"  %>
<html><head><title>Validierung mit dem 
RequiredFieldValidator</title></head>
<body>
<form runat="server" id="myForm">
<select id="selectColor" runat="server">
   <option selected="true">Ihre Lieblingsfarbe</option>
   <option>rot</option>
   <option>gelb</option>
   <option>grün</option>
   <option>blau</option>
   <option>orange</option>
   <option>violett</option>
</select>
<asp:RequiredFieldValidator  
     ControlToValidate="selectColor"
     runat="server"
     Text="Bitte geben Sie Ihre Lieblingsfarbe ein."
     ErrorMessage="Bitte geben Sie Ihre Lieblingsfarbe ein."
     InitialValue="Ihre Lieblingsfarbe"> 
</asp:RequiredFieldValidator>
<br>
<input type="submit" value="OK" >
</form>
</body></html>

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 7.2 Bei einem Dropdown-Listenfeld können Sie den ungültigen Eintrag über das value-Attribut definieren.

Der oberste Eintrag des Auswahlfelds lautet Ihre Lieblingsfarbe. Indem beim RequiredFieldValidator-Steuerelement das Attribut InitialValue ebenfalls auf Ihre Lieblingsfarbe gesetzt wird, kann der Anwender diesen Eintrag nicht selektieren.

Wenn die option-Elemente zusätzlich über das value-Attribut verfügen, können Sie das ungültige Element auch über das value-Attribut definieren. In der Beispieldatei ValidierungRequired03.aspx erhält der ungültige Eintrag beim Attribut value den Wert 0:

<!-- ValidierungRequired03.aspx -->
<%@ Page Language="VB" Debug="True" Strict="True"  %>
<html><head><title>Validierung mit dem 
RequiredFieldValidator</title></head>
<body>
<form runat="server" id="myForm">
<select id="selectColor" runat="server">
  <option value="0" selected="true">Ihre Lieblingsfarbe 
                                    </option>
  <option value="1">rot</option>
  <option value="2">gelb</option>
  <option value="3">grün</option>
  <option value="4">blau</option>
  <option value="5">orange</option>
  <option value="6">violett</option>
</select>
<asp:RequiredFieldValidator  
     ControlToValidate="selectColor" 
     runat="server"
     Text="Bitte geben Sie Ihre Lieblingsfarbe ein."
     ErrorMessage="Bitte geben Sie Ihre Lieblingsfarbe
                   ein."
     InitialValue="0"> 
</asp:RequiredFieldValidator>
<br>
<input type="submit" value="OK" >
</form>
</body></html>

Galileo Computing

7.1.3 Die Fehlermeldung definieren  toptop

Beim RequiredFieldValidator-Steuerelement und bei allen übrigen Validierungssteuerelementen können Sie an drei verschiedenen Stellen den Text einer Fehlermeldung angeben: beim ErrorMessage-Attribut, beim Text-Attribut und zwischen dem Start- und dem Ende-Tag. Das wirft die Frage nach den Unterschieden auf.

Eine Angabe zwischen Start- und Ende-Tag ist äquivalent einer Zuweisung zum Text-Attribut. Hier wie dort können Sie auch HTML-Tags einfügen. Wenn Sie sowohl ein Text-Attribut definieren als auch zwischen Start- und Ende-Tag eine Angabe machen, dann »gewinnt« der Text zwischen den Tags.

Die Angabe beim ErrorMessage-Attribut wird nur vom ValidationSummary-Steuerelement ausgewertet. Wenn das ErrorMessage-Attribut nicht definiert wird, erscheint bei der Ausgabe des ValidationSummary-Steuerelements kein Hinweis auf diesen Fehler. Falls Sie aber nur das ErrorMessage-Attribut definieren und kein Text-Attribut, dann wird die ErrorMessage-Nachricht sowohl für die Darstellung neben dem Steuerelement als auch für die Darstellung in der Zusammenfassung verwendet.

  

Einstieg in VB.NET

VB.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML




Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de