7.7 CustomValidator
 
Wenn Sie spezielle Anforderungen an eine Eingabeüberprüfung haben, die sich mit den bisher vorgestellten Validierungssteuerelementen nicht abdecken lassen, können Sie eine individuelle Überprüfung mit einem CustomValidator-Steuerelement definieren.
Während die bisher vorgestellten Validierungssteuerelemente stets sowohl für eine serverseitige als auch für eine clientseitige Überprüfung gesorgt haben, kann ASP.NET bei der Validierung mit einem CustomValidator-Steuerlement nicht selbst die JavaScript-Routinen für die clientseitige Überprüfung erstellen. Daher können Sie den Test entweder nur serverseitig durchführen, oder Sie erstellen selbst zusätzlich entsprechende Routinen für die clientseitige Überprüfung. Mit dem Attribut OnServerValidate legen Sie die Routine für die serverseitige Überprüfung fest. Mit dem Attribut ClientValidationFunction stellen Sie den Zusammenhang zur benötigten JavaScript- beziehungsweise VBScript-Routine her.
Der Versand des Formulars löst das ServerValidate-Ereignis aus. Die Prozedur, die auf dieses Ereignis reagiert, benötigt diese Signatur:
Sub serverTest (source As object, _
arguments As ServerValidateEventArgs)
Der Parameter arguments vom Typ ServerValidateEventArgs verfügt über zwei wichtige Eigenschaften:
|
Über die Eigenschaft Value rufen Sie den Wert ab, den der Anwender eingegeben hat. |
|
Die Eigenschaft IsValid setzen Sie selbst auf True oder False, nachdem Sie die Überprüfung durchgeführt haben. |
7.7.1 Serverseitige Überprüfung
 
Als Beispiel habe ich ein Skript aus der .NET-Dokumentation leicht abgewandelt. Der Anwender soll eine Zahl eingeben, die ohne Rest durch 3 teilbar ist. Im ersten Schritt wird die Überprüfung nur serverseitig durchgeführt. custom01.aspx enthält die Realisierung. Abbildung 7.10 zeigt die Darstellung im Browser.
 Hier klicken, um das Bild zu Vergrößern
Abbildung 7.10 Mit einem CustomValidator definieren Sie individuelle Gültigkeitsüberprüfungen.
| Attribut
|
Wert
|
| id
|
Eindeutiger Bezeichner
|
| ControlToValidate
|
id des zu überprüfenden Steuerelements
|
| ClientValidationFunction
|
Name der JavaScript-Routine für die Validierung
|
| OnServerValidate
|
Name der serverseitigen Ereignisprozedur für die Validierung
|
| ErrorMessage
|
Fehlermeldung für das ValidationSummary-Steuerelement
|
| Text
|
Fehlermeldung
|
| Display
|
None | Static (Default) | Dynamic
|
| EnableClientScript
|
true | false
|
| ForeColor
|
Farbangabe
|
| BackColor
|
Farbangabe
|
| runat
|
Server
|
Tabelle 7.7 Attribute des CustomValidator-Steuerelements
<!-- custom01.aspx -->
<% @Page debug="true" Language="VB" Strict="True" %>
<script runat="server" >
Sub IstDurchDreiTeilbar (source As object, _
args As ServerValidateEventArgs)
try
Dim num As Integer = Integer.Parse(args.Value)
args.IsValid = ((num mod 3) = 0)
catch ex As Exception
args.IsValid = false
End try
End Sub
</script>
<html><head>
<title>CustomValidator</title>
</head><body>
<h3>CustomValidator</h3>
<p>Bitte geben Sie eine ganze Zahl ein, die
ohne Rest durch 3 teilbar ist.</p>
<form runat="server">
<input type="text" runat="server" id="txtZahl">
<asp:Button id="btnOK"
Text=" OK "
runat="server"/>
<br>
<asp:CustomValidator
ControlToValidate="txtZahl"
OnServerValidate="IstDurchDreiTeilbar"
Text="Diese Zahl ist nicht durch 3 teilbar."
runat="server"
EnableClientScript="false" >
</asp:CustomValidator>
</form></body></html>
Die Eigenschaft arguments.Value gibt einen String zurück. Mit der statischen Methode Integer.Parse wird zunächst eine Konvertierung in den Integer-Typ durchgeführt.
Wenn bereits bei der Konvertierung ein Fehler auftritt, wird die IsValid-Eigenschaft auf False gesetzt. Ein Fehler tritt beispielsweise auf, wenn der Anwender keine Zahl, sondern Buchstaben eingegeben hat, oder wenn die eingegebene Zahl größer oder kleiner ist, als sie der Integer-Typ verarbeiten kann.
Wenn die Konvertierung gelingt, wird das Ergebnis der Überprüfung, ob bei der Division durch 3 ein Rest bleibt oder nicht, ebenfalls der IsValid-Eigenschaft zugewiesen.
7.7.2 Eine clientseitige Überprüfung ergänzen
 
Wenn Sie den Test zusätzlich auch im Browser durchführen möchten, dann bleibt Ihnen bei der Verwendung eines CustomValidator-Steuerelements nichts anderes übrig, als die entsprechende Prüflogik selbst in einem Skript abzubilden, das im Browser ablaufen kann. custom02.aspx ergänzt die entsprechenden Angaben in VBScript. Laut .NET-Dokumentation wird zwar auch JavaScript unterstützt. Bei eigenen Versuchen ist es mir aber nicht gelungen, eine entsprechende JavaScript-Routine zur Mitarbeit zu bewegen.
<!-- custom02.aspx -->
<% @Page debug="true" Language="VB" Strict="True" %>
<script runat="server" >
Sub IstDurchDreiTeilbar (source As object, _
args As ServerValidateEventArgs)
try
Dim num As Integer = Integer.Parse(args.Value)
args.IsValid = ((num mod 3) = 0)
catch ex As Exception
args.IsValid = false
End try
End Sub
</script>
<script language="vbscript">
<!--
Sub ClientTest(source, args)
If (args.Value mod 3 ) = 0 Then
args.IsValid=true
Else
args.IsValid=false
End If
End Sub
// -->
</script>
<html><head>
<title>CustomValidator</title>
</head><body>
<h3>CustomValidator</h3>
<p>Bitte geben Sie eine ganze Zahl ein, die
ohne Rest durch 3 teilbar ist.</p>
<form runat="server">
<asp:TextBox id="txtZahl" runat="server" />
<asp:Button id="btnOK"
Text=" OK "
runat="server" />
<br>
<asp:CustomValidator
id="myCustomValidator"
ControlToValidate="txtZahl"
OnServerValidate="IstDurchDreiTeilbar"
ClientValidationFunction="ClientTest"
Text="Die Eingabe ist ungültig."
runat="server"
EnableClientScript="true" />
</form></body></html>
Im CustomValidator-Steuerelement wurde das Attribut ClientValidationFunction="ClientTest" ergänzt und das Attribut EnableClientScript auf true gesetzt. Nach dem serverseitigen Skriptteil wurde das clientseitige Skript ClientTest eingefügt. Die Logik des clientseitigen Skripts entspricht exakt der Logik des serverseitigen Skripts.
|