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>
|