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


Galileo Computing

7.4 CompareValidator  downtop

Mit dem CompareValidator-Steuerelement können Sie die Eingabe eines Anwenders mit einem anderen Wert vergleichen. Sie können die Eingabe

gp  mit einem fixen Wert vergleichen,
gp  mit dem Inhalt eines anderen Eingabefelds vergleichen,
gp  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:

gp  E Equal,
gp  E NotEqual,
gp  E GreaterThan,
gp  E GreaterThanEqual,
gp  E LessThan,
gp  E LessThanEqual,
gp  E DataTypeCheck.

Galileo Computing

7.4.1 Die Eingabe mit einem fixen Wert vergleichen  downtop

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.


Galileo Computing

7.4.2 Zwei Eingabefelder miteinander vergleichen  downtop

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.


Galileo Computing

7.4.3 Eine Typüberprüfung vornehmen  toptop

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:

gp  Im Type-Attribut geben Sie den gewünschten Datentyp an. Zur Verfügung stehen String, Integer, Double, Date und Currency.
gp  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>
  

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