Inhalt
Vorwort
1 Wie .NET und ASP.NET funktionieren
2 Installation
3 Hinweise zu VB.NET
4 »Hallo, Welt!« – Ein ASP.NET-Crashkurs
5 Die Page-Klasse
6 HTML-Serversteuerelemente
7 Validierung von Anwendereingaben
8 Webserversteuerelemente
9 Webserversteuerelemente für die Darstellung von Listen
10 Webserversteuerelemente selbst erstellen
11 Der Status von Seiten, Sitzungen und Applikationen
12 ASP.NET und Datenbanken
13 »Wer darf was?« ASP.NET und Sicherheit
14 Webanwendungen erstellen und konfigurieren
15 Leistungssteigerung durch Caching
16 Web Services
A Anhang
Index
Download (ca 14,3 MB)
Buch bestellen (29,90 EUR)
Ihre Meinung?@
<< zurück | Galileo Computing / <openbook> / Einstieg in ASP.NET | vor >>
Einstieg in ASP.NET von Matthias Lohrer
| Kapitel 7 Validierung von Anwendereingaben
|  | 7.1 RequiredFieldValidator
|  |  | 7.1.1 Display-Attribut
|  |  | 7.1.2 InitialValue-Attribut
|  |  | 7.1.3 Die Fehlermeldung definieren
|  | 7.2 Das ValidationSummary-Steuerelement
|  | 7.3 Wie das Display-Attribut funktioniert
|  | 7.4 CompareValidator
|  |  | 7.4.1 Die Eingabe mit einem fixen Wert vergleichen
|  |  | 7.4.2 Zwei Eingabefelder miteinander vergleichen
|  |  | 7.4.3 Eine Typüberprüfung vornehmen
|  | 7.5 RangeValidator
|  | 7.6 RegularExpressionValidator
|  |  | 7.6.1 Reguläre Ausdrücke erstellen
|  |  | 7.6.2 Eingaben mit regulären Ausdrücken überprüfen
|  |  | 7.6.3 Konventionen für gültige Passwörter überprüfen
|  | 7.7 CustomValidator
|  |  | 7.7.1 Serverseitige Überprüfung
|  |  | 7.7.2 Eine clientseitige Überprüfung ergänzen
## 7.4 CompareValidator Mit dem CompareValidator-Steuerelement können Sie die Eingabe eines Anwenders mit einem anderen Wert vergleichen. Sie können die Eingabe
| mit einem fixen Wert vergleichen,
| mit dem Inhalt eines anderen Eingabefelds vergleichen,
| daraufhin überprüfen, ob die Eingabe zu einem bestimmten Datentyp passt.
Attribut | Wert
--- | ---
id | Eindeutiger Bezeichner
ControlToValidate | Die Id des zu überprüfenden Steuerelements
ValueToCompare | Fixer Wert, mit dem verglichen wird
ControlToCompare | Id des Steuerelements, mit dessen Inhalt das ControlToValidate verglichen wird
Type | Datentyp, auf den die Eingabe überprüft wird. Möglich sind String, Integer, Double, Date, Currency.
Operator | Der verwendete Vergleichsoperator. Möglich sind Equal, NotEqual, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual, DataTypeCheck.
ErrorMessage | Fehlermeldung für ein ValidationSummary-Element
Text | Text der Fehlermeldung
Display | None | Static (Default) | Dynamic
EnableClientScript | true|false
ForeColor | Farbangabe
BackColor | Farbangabe
runat | server
Tabelle 7.3 Attribute von asp:CompareValidator Mit dem Attribut Operator geben Sie den Vergleichsoperator an. Zur Verfügung stehen diese Werte:
| E Equal,
| E NotEqual,
| E GreaterThan,
| E GreaterThanEqual,
| E LessThan,
| E LessThanEqual,
| E DataTypeCheck.
### 7.4.1 Die Eingabe mit einem fixen Wert vergleichen compare01.aspx zeigt einen einfachen Weg, die Eingabe des Anwenders mit einem fixen Wert zu vergleichen. Der Anwender soll eine ganze Zahl eingeben, die kleiner oder gleich 512 ist. Die drei entscheidenden Attribute im asp:CompareValidator-Steuerelement sind ValueToCompare="512", Type="Integer" und Operator = "LessThanEqual".
    <!-- compare01.aspx -->
    <% @Page debug="true" %>
    <html><head>
    <title>CompareValidator-Demo</title></head><body>
    <form runat="server">
    <h3>CompareValidator-Demo</h3>
    Bitte geben Sie eine ganze Zahl ein, die kleiner oder
    gleich 512 ist.<br>
    <input type="text" runat="server" id="txtZahl">
    <asp:CompareValidator runat="server"
         ControlToValidate="txtZahl"
         ValueToCompare="512"
         Type="Integer"
         Operator="LessThanEqual"
         Text="Bitte eine ganze Zahl kleiner oder
               gleich 512 eingeben."
    /><br>
    <input type="submit" value="OK" />
    </form></body></html>
Tabelle 7.3 nennt die gültigen Vergleichsoperatoren und auch die Datentypen, auf die Sie überprüfen können. Das CompareValidator-Steuerelement funktioniert ähnlich wie das RangeValidator-Steuerelement, das in Abschnitt 7.5, RangeValidator, vorgestellt wird. Dort finden Sie unter anderem auch ein Beispiel mit Datumsangaben. ### 7.4.2 Zwei Eingabefelder miteinander vergleichen Der klassische Fall, in dem zwei Anwendereingaben miteinander verglichen werden, ist die doppelte Eingabe eines Passwortes, wenn dieses neu definiert werden soll. In diesem Fall sollen die beiden Eingaben miteinander identisch sein. compare02.aspx zeigt einen ersten Ansatz für die Realisierung dieser Aufgabe:
    <!-- compare02.aspx -->
    <% @Page debug="true" %>
    <html><head>
    <title>Zwei Eingaben miteinander vergleichen</title>
    </head><body>
    <h3>Zwei Eingaben miteinander vergleichen</h3>
    <form runat="server">
    Ihr Passwort:<br>
    <input type="password" id="pass1" runat="server"><br>
    Nochmal Ihr Passwort: <br>
    <input type="password" id="pass2" runat="server"><br>
    <input type="submit" value="  OK  " runat="server">
    <asp:CompareValidator runat="server" id="cmp"
         ControlToValidate="pass1"
         ControlToCompare="pass2"
         Operator="Equal">
    <p>Die Passwörter müssen identisch sein.
    Bitte nochmal neu eingeben. </p>
    </asp:CompareValidator>
    </form></body></html>
Auf den ersten Blick sieht im Browser alles ordentlich aus. Beim Testen des Formulars mit dem Internet Explorer 6.0 fällt aber negativ auf, dass der Browser schneller schaltet, als es erwünscht ist. Sobald der Anwender das erste Passwort ausgefüllt hat und zum zweiten Feld weitergeht, erscheint bereits die Fehlermeldung. Die clientseitige Überprüfung schlägt bereits Alarm, noch bevor der Anwender überhaupt die zweite Eingabe vornehmen konnte. Dieses Problem lösen Sie, indem Sie die Werte bei ControlToValidate und ControlToCompare einfach gegeneinander austauschen. Das Validierungssteuerelement soll also nicht das erste Passwortfeld daraufhin überprüfen, ob es mit dem zweiten Feld übereinstimmt, sondern das zweite Feld daraufhin überprüfen, ob es mit dem ersten Feld übereinstimmt. Dann kann der Anwender zunächst das erste Feld ausfüllen und dann das zweite Feld. Erst wenn der Anwender anschließend beispielsweise mit der Tab-Taste zur OK-Schaltfläche weitergeht, wird die Validierung clientseitig durchgeführt. Trotzdem ist das Formular in dieser Form noch nicht praxistauglich. Bislang darf der Anwender nämlich die Felder leer lassen, ohne dass die Validierung Alarm schlagen würde. Um den Anwender zu einer Eingabe zu zwingen, müssen Sie zusätzlich mindestens für eines der Passworteingabefelder ein RequiredFieldValidator-Steuerelement ergänzen.
Tipp Wenn Sie mehrere Validierungssteuerelemente verwenden, müssen Sie sich außerdem überlegen, ob Sie den Anwender auch mit mehreren unterschiedlichen Fehlermeldungen konfrontieren möchten. Im vorliegenden Fall reicht die Meldung Bitte geben Sie zwei identische Passwörter ein in jedem Fall aus. Also sollten Sie auch nur eine globale Fehlermeldung mit einem ValidationSummary-Steuerelement erzeugen, statt unter Umständen mehrere Fehlermeldungen anzuzeigen.
compare03.aspx zeigt den entsprechend komplettierten Code.
    <!-- compare03.aspx -->
    <% @Page debug="true" %>
    <html><head>
    <title>Zwei Eingaben miteinander vergleichen</title>
    </head><body>
    <h3>Zwei Eingaben miteinander vergleichen</h3>
    <form runat="server">
    Ihr Passwort:<br>
    <input type="password" id="pass1" runat="server"><br>
    Nochmal Ihr Passwort: <br>
    <input type="password" id="pass2" runat="server"><br>
    <input type="submit" value="  OK  " runat="server"><br>
    <br>
    <asp:RequiredFieldValidator runat="server"
         ControlToValidate="pass2" />
    <asp:CompareValidator runat="server"
         ControlToValidate="pass2"
         ControlToCompare="pass1"
         Operator="Equal" />
    <asp:ValidationSummary runat="server"
         HeaderText="Bitte geben Sie zwei identische
                     Passwörter ein."
         ShowSummary="true" />
    </form></body></html>
Damit funktioniert das Formular nun wie gewünscht. Wenn der Anwender überhaupt keine Eingaben macht, scheitert die Validierung am RequiredFieldValidator-Steuerelement. Wenn die Passwörter nicht identisch sind, scheitert die Validierung am CompareValidator-Steuerelement. In jedem Fall wird das ValidationSummary-Steuerelement aktiv und zeigt die im Attribut HeaderText definierte Meldung an, die für den vorliegenden Fall völlig ausreichend ist. Der Abschnitt über das RegularExpressionValidator-Steuerelement ergänzt diese Seite zusätzlich noch um die Überprüfung, ob das Passwort mindestens acht Zeichen lang ist und ausschließlich Ziffern oder Buchstaben aber keine Sonderzeichen enthält. ### 7.4.3 Eine Typüberprüfung vornehmen Wenn Sie die Eingabe des Anwenders lediglich daraufhin überprüfen möchten, ob sie zu einem bestimmten Datentyp passt, dann sind zwei Attribute besonders wichtig:
| Im Type-Attribut geben Sie den gewünschten Datentyp an. Zur Verfügung stehen String, Integer, Double, Date und Currency.
| Mit dem Attribut Operator="DataTypeCheck" geben Sie an, dass zwar eine Typüberprüfung, aber kein Vergleich stattfinden soll.
Achtung ASP.NET überprüft damit, ob die Eingabe des Anwenders zum genannten Datentyp passt. Da aber jeder Datentyp einen minimalen und einen maximalen Wert kennt, findet letztlich doch ein Vergleich statt, und zwar mit den jeweiligen Grenzwerten des Datentyps. Wenn beispielsweise ein Integer-Typ verlangt wird, dann muss die Zahl zwischen -2.147.483.648 und +2.147.483.648 liegen.
Die umgangssprachliche Rede von der »ganzen Zahl«, die der Anwender eingeben soll, ist zwar für den Anwender gut verständlich, innerhalb des Programms aber eigentlich nicht ganz richtig. Wenn man das im Hinterkopf behält, gibt es damit aber keine wirklichen Probleme. compare04.aspx testet, ob der Anwender eine solche »ganze Zahl« eingegeben hat.
    <!-- compare04.aspx -->
    <% @Page debug="true" %>
    <html><head>
    <title>CompareValidator-Demo</title></head><body>
    <form runat="server">
    <h3>CompareValidator-Demo</h3>
    Bitte geben Sie eine ganze Zahl ein.<br>
    <input type="text" runat="server" id="txtZahl">
    <asp:CompareValidator runat="server"
         ControlToValidate="txtZahl"
         Operator="DataTypeCheck"
         Type="Integer"
         Text="Bitte eine ganze Zahl eingeben." /><br>
    <input type="submit" value="OK" />
    </form></body></html>
<< zurück | <top> | vor >>
Zum Katalog
Einstieg in ASP.NET bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung

.NET-Bibliothek
| Einstieg in VB.NET
| VB.NET
| Einstieg in C#
| Visual C#
| VB.NET und Datenbanken

Empfehlung
| Einstieg in XML

Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

MyGalileo
Der Service für registrierte Leser: Info

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