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.7 CustomValidator  downtop

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:

gp  Über die Eigenschaft Value rufen Sie den Wert ab, den der Anwender eingegeben hat.
gp  Die Eigenschaft IsValid setzen Sie selbst auf True oder False, nachdem Sie die Überprüfung durchgeführt haben.

Galileo Computing

7.7.1 Serverseitige Überprüfung  downtop

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.

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


Galileo Computing

7.7.2 Eine clientseitige Überprüfung ergänzen  toptop

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.

  

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