Thomas Bandt

Über mich | Kontakt | Archiv

[ASP.NET 2.0] ClientValidationFunction eines CustomValidation-Controls nutzen

Ich hab mich grad gefragt, wie man eine lauffähige JavaScript-Funktion zustande bekommt, mit der man einen CustomValidator auch am Client ausführen kann. Normalerweise benutze ich dafür allein die serverseitigen Funktionen, aber was tut man nicht alles für des Users Zufriedenheit ;-)

Nachfolgend ein kleines Beispiel, wie man eine Checkbox validieren kann. Das ist eigentlich immer dann nützlich, wenn man z.B. abfragen will, ob der User die Nutzungsbedingungen, AGB o.ä. akzeptiert. Anbei auch noch die Server-Methode:


"Terms"
runat="server" Checked="false" />
"LabelTermsText" runat="server" AssociatedControlID="Terms">
   Ich versichere, dass dieses Snippet nicht gegen Urheberrechte Dritter sowie geltende Gesetze verstößt.

   ID="ValTerms"
   runat="server"
   OnServerValidate="ValTerms_OnServerValidate" 
   ErrorMessage="Bitte bestätigen Sie, dass dieses Snippet nicht gegen geltendes Recht verstößt."
   ToolTip="Bitte bestätigen Sie, dass dieses Snippet nicht gegen geltendes Recht verstößt." 
   ValidateEmptyText="true"
   ClientValidationFunction="ValidateTerms"
   ValidationGroup="AddSnippet">*

Was gibt es zu beachten? Drei Sachen:

  1. Die Signatur der JavaScript-Funktion. Irgendwo in den Tiefen der automatisch generierten JavaScripts von ASP.NET wird die Funktion entsprechend aufgerufen. Will man das Ganze nun auch zum Laufen bringen, reicht es nicht einfach "false" oder "true" als Return-Value zu definieren, sondern es muss explizit args.IsValid entsprechend gesetzt werden. Da kommt man sich schnell ganz hilflos vor, so ohne IntelliSense und allem, wenn man das nicht weiß ;-).
  2. Dem CustomControl darf die Eigenschaft "ControlToValidate" nicht gegeben werden! Grund hierfür ist die Weigerung des ASP.NET-Teams CheckBox-Controls validierbar zu machen ... warum und wieso habe ich aufgehört zu verfolgen, es ist für mich sowieso nicht nachvollziehbar. Die nachfolgende serverseitige Methode wird beim Page.Validate() trotzdem aufgerufen. Man muss sich halt das entsprechende Control selbst auswählen und kann nicht bequem über .Value validieren, aber egal.
  3. Daraus folgt natürlich auch, dass uns auch der Wert der Checkbox in der JavaScript-Funktion nicht zur Verfügung steht. Also gilt auch hier: selbst ist der Entwickler/die Entwicklerin.

Hier noch die serverseitige Validierungs-Methode:

protected void ValTerms_OnServerValidate(object sender, ServerValidateEventArgs e)
{
   e.IsValid = Terms.Checked;
}



« Zurück  |  Weiter »