In ASP.NET gibt es die doch sehr nützlichen Validator-Controls. Diese bieten die Möglichkeit, Werte von Web-Formularen zu prüfen. Besonders sinnvoll ist aus meiner Sicht die clientseitige Valisierung, weil hier Postbacks zum Server schon im Vorab unterbunden werden. Allerdings gibt es hier besonders beim CustomValidator einiges zu beachten, worauf ich in diesem Blog-Eintrag etwas eingehen möchte.
Mein konkreter Anwendungsfall war, zu prüfen, ob in einem TreeView mit Checkboxen mindestens 1 Knoten angehakt ist.
Wenn man sich die verfügbaren Eigenschaften des CustomValidators anschaut, ist man versucht
a) in ControlToValidate den Namen des zu validierenden Controls anzugeben und
b) unter ClientValidationFunction eine JavaScript-Funktion anzugeben, die true zurückgibt, wenn die Validierung erfolgreich war und false, wenn nicht
Das funktioniert aber leider nicht
Wichtig sind folgende Sachverhalte:
Hier die Beispiel-JavaScript-Funktion:
| <script type=”text/javascript”> function ValidateTreeview(src, args) { args.IsValid = IsTreeviewNodeChecked() } function IsTreeviewNodeChecked() { var treeView = document.getElementById(‘<% =MyTreeView.ClientID %>’); var checkboxes = treeView.getElementsByTagName(‘input’); for (var i=0; i<checkboxes.length;i++) { if (checkboxes[i].checked) { return true; } } return false; } </script> |
Dem CustomValidator muss nun nur ValidateTreeview als ClientValidationFunction und eine passende ErrorMessage hinterlegt werden und fertig ist die clientseitige Validierung.