Validierung direkt während der Eingabe von Nocturne zum Thema Code To Joy - Mi, 07.03.2007

Die Controls zur Validierung von Benutzereingaben, die vom .Net Framework bereitgestellt werden, bieten bereits sehr vielfältige Möglichkeiten. Darunter auch eine Validierung per JavaScript, um diese direkt im Browser durch zu führen, ohne die Seite erneut zum Server senden zu müssen. In letzter Instanz sollte dieser selbstverständlich die Validierung vornehmen, vorher jedoch ist es benutzerfreundlicher, wenn das ganze rein clientseitig abläuft. Während für die Standard-Prüfungen (z.B. "Required Fields") bereits automatisch clientseitiger Code erzeugt wird, ist beim mächtigen RegularExpressionValidator stets Handarbeit angesagt.
In jedem Fall jedoch störte mich der Umstand, dass auch die clientseitige Überprüfung, erst beim TextChanged-Ereignis der Textbox stattfindet. Das Ereignis tritt immer erst dann ein, wenn das Eingabefeld den Fokus verloren hat.

Für den Fall, dass man z.B. einen eingegeben String auf ungültige Zeichen überprüfen möchte, würde es sich doch anbieten, wenn direkt nach der Eingabe eines "verbotenen" Zeichens, der Validator darauf aufmerksam macht. Um dies zu erreichen, habe ich die zu validierenden Textboxen einfach um folgendes Attribut erweitert:

C#
1 MyTextbox.Attributes["onKeyUp"] = "this.blur(); this.focus()";

Dies bewirkt, dass bei jedem eingegeben Zeichen, der Eingabefokus zunächst entfernt wird und anschließend gleich wieder gesetzt wird. Ohne eine Validator-Control bewirkt dies zunächst noch nichts.

Beispiel: Die Überprüfung der Eingabe schlägt fehl, sobald ein '@' eingegeben wird. Der Hinweis auf das nicht erlaubte Zeichen, wird direkt nach dem Tippen eingeblendet.
C#
1 TextBox MyTextbox = new TextBox(); 2 MyTextbox.Attributes["onKeyUp"] = "this.blur(); this.focus()"; 3 MyTextbox.ID = "ValidateMe"; 4 5 RegularExpressionValidator valExpression = new RegularExpressionValidator(); 6 valExpression.Display = ValidatorDisplay.Dynamic; 7 valExpression.ValidationExpression = @"^[^@]+$"; 8 valExpression.ControlToValidate = MyTextbox.ID; 9 valExpression.Font.Bold = true; 10 valExpression.Text = "Das @-Zeichen ist nicht erlaubt!";
Stolperfalle Connection Pooling