Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Einführung in ASP.NET Validation Controls (Teil 1)

Geschrieben von: Christian Holm
Kategorie: ASP.NET

This printed page brought to you by AlphaSierraPapa

Es gibt heutzutage kaum mehr Webseiten, die auf Prüfung der Benutzereingaben verzichten können. Beginnend bei den einfachsten Szenarien, wie die Überprüfung einer e-Mail Adresse bei einem Kontaktformular, Datumsüberprüfung bei Kreditkarten in einem Web Shop bis zur Überprüfung der Logininformationen oder der Notwendigkeit einer eigenen Verifizierungslogik - alles das ist möglich mit den ASP.NET Validation Controls. Dieser erste Teil der Artikelserie gibt Ihnen eine Einführung in die Validation Controls in ASP.NET.

Sie denken jetzt vielleicht: "na gut, aber wie läßt sich dies durchführen, wie groß ist der Aufwand und wie z.B. integriere ich die ASP.NET Validation Controls in eine vorhandene Website?" - Diese Aspekte möchte ich in diesem Artikel, anhand von alltäglichen Beispielen, besprechen.

Voraussetzung um den Sourcecode dieses Artikels verwenden zu können ist eine Installation des Microsoft .NET Framework SDK's auf einem Webserver. Weiters ist es von Vorteil, daß der Leser schon Grundkenntnisse bzw. Erfahrung in Programmiertechniken besitzt - es finden sich etliche Artikel auf diesem Server, um das notwendige Wissen von Grund auf zu erlernen.

Weiters verwendet dieser Artikel bereits ASP.NET Web Form Controls (TextBox, RadioButtonList). Für den Fall, daß Sie noch nicht sattelfest auf diesem Gebiet sind, bietet der Artikel Einführung in ASP.NET Web Forms das nötige Grundwissen hierfür.

Ein Überblick über die Validation Contols

Fehlerbehandlung ist ein leidiges Thema im Leben eines Programmierers - der Validierungssourcecode ist oft länger als das eigentliche Kernprogramm. Schließlich soll der Benutzer vernünftig mit dem Programm bzw. der Webapplikation oder -site arbeiten können, ohne daß er frustriert aufgibt und zur Konkurrenz "überläuft".

Bei Webapplikationen hatten Sie bisher u.a. die Möglichkeit professionelle Validierungen mittels Script-Sprachen (VBScript, JavaScript) durchzuführen. Dieser Weg hatte aber einige Stolpersteine, z.B. unterstützt der Client-Browser die Scriptsprache überhaupt? Es war zu verhindern, daß die Seite erst gepostet wird, wenn deren Inhalt gültig war - und im Falle einer fehlerhaften Eingabe sollte der Client umgehend Feedback erhalten. Dies resultierte in codelastigen Webseiten und zudem kommt noch dazu "wo viel Code, da auch leider viele Bugs" - denn nicht nur Anwender Ihrer Webseiten machen Fehler.

Um diesen Unanehmlichkeiten entgegenzuwirken, bieten die Validation Controls in ASP.NET ein flexibles, erweiterbares API, sowie umfangreiche "built-in" Verifizerungsmöglichkeiten (die sich automatisch downgraden, um auch auf jeden älteren Browser ihren Dienst verrichten zu können). Ebenso sind sie leicht in bestehende Webprojekte integrierbar - mit nur wenigen Codezeilen.

Weitere Vorteile der Validation Controls sind:

Was ist ein Validator und welche gibt es?

Im Allgemeinen ist so ein Validator eine Control die einen speziellen Gültigkeitsausdruck enthält und diesen mit dem Inhalt einer Benutzereingabe einer anderen Control vergleicht. Der Validator bleibt vor dem Benutzer solange verborgen, bis dieser eine fehlerhafte Eingabe (z.B eine ungültige e-Mail Adresse) macht. Dann wird nämlich eine fehlerspezifische Meldung ausgegeben. Statt einer Fehlermeldung können Sie bei den Validation Controls auch ein Bild (z.B "Stop"-Zeichen) verwenden.

Zum Zwecke der Übersicht der im Artikel enthaltenen Validators sind hier die Controls enthalten, welche das Microsoft .NET Framework (bis jetzt) unterstützt. Es kann natürlich der Fall eintreten, daß bis zum endgültigen Release des Frameworks aufgrund der Popularität und Einfachheit der Controls Features zu den jetzigen hinzukommen oder neue eigenständige Controls hinzugefügt werden. Aber schon mit den vorhandenen läßt sich vernünftig arbeiten.

Natürlich werden die einzelen Validators später ausführlich mit Beispielen erklärt:

In weiteren Artikeln werden wir noch behandeln:

Beachte: Alle verwendeten Beispiele, obwohl lauffähig, erfüllen nur dem Zwecke des im Artikel besprochenen Kernthemas. In diesem Fall werden hier nur die Benutzereingaben überprüft und keine anderen serverseitigen Events getriggert.

Besprechen wir nun die einzelnen Validators im Detail.

RequiredFieldValidator

Der RequiredFieldValidator überprüft, ob die zugewiesene Control vom Client entweder ausgefüllt oder ob der Client eine Auswahl aus vorgegebenen Controls getroffen hat. Bei Verwendung mit einer ASP.NET Textbox Control wir aber nicht die Sinnhaftigkeit der Benutzereingabe überprüft, sondern eben wie der Name schon verrät wird nur überprüft, ob sie überhaupt vom Client ausgefüllt wurde. Wie Sie später lesen werden, lassen sich komplexe Aufgaben durch Kombinationen von Controls bewerkstelligen.

In dem nun folgenden Beispiel demonstriere ich Ihnen die ersten Grundlagen für ein Bestellformular. Es wird hier überprüft, ob das Namensfeld (asp:TextBox) ausgefüllt wurde, und zusätzlich muß der Benutzer angeben, wie er bezahlen möchte (asp:RadioButtonList). Da dieses Beispiel etwas umfangreicher ist habe ich es aufgeteilt und nur die relevanten Aspekte herausgegriffen. Um das Beispiel selbst auszuprobieren, führen Sie die ASP.NET Datei ReqFieldValidator.aspx aus dem Download des Artikels aus.

Zunächst einmal das visuelle Ergebnis:

Und nun zum Sourcecode, aufgeteilt in 2 Abschnitte.

Der Name des Käufers

 ...
 <tr>
      <td align=left>Name:</td>
      <td>
        <asp:TextBox id=txtName runat="server" />
      </td>
      <td>
        <asp:RequiredFieldValidator id="ReqFName" runat="server"
            ControlToValidate="txtName" 
            ErrorMessage="Bitte Name eingeben!">
        </asp:RequiredFieldValidator>
      </td>
 </tr>
 ...

Um die Positionierung der Texte und Eingabefelder zu erleichtern, habe ich die ASP.NET Contols in einen gemeinsamen HTML-Table eingebettet. In dem obigen Codeblock wird überprüft, ob der User (s)einen Namen in die Textbox mit der ID "txtName" eingegeben hat. Dies geschieht mittels dem RequiredFieldValidator mit der ID "ReqFName". Das Attribut ControlToValidate referenziert die Textbox Control, also jene Control, die überprüft werden soll. ErrorMessage bezeichnet die Fehlermeldung die ausgegeben werden soll.

Die Wahl der Zahlungsart

 ...
  <tr>
      <td align=left>Zahlungsart:</td>
      <td>
        <ASP:RadioButtonList id=RadioButtonList1 RepeatLayout="Flow" 
		    runat="server">
            <asp:ListItem>Kreditkarte</asp:ListItem>
            <asp:ListItem>Nachnahme</asp:ListItem>
        </ASP:RadioButtonList>
      </td>
      <td align=middle rowspan=1>
        <asp:RequiredFieldValidator id="RequiredFieldValidator1" 
		    runat="server"
            ControlToValidate="RadioButtonList1" 
            ErrorMessage="Zahlungsart auswählen">
        </asp:RequiredFieldValidator>
      </td>
    </tr>
 ...

Die Auswahlmöglichkeit der Zahlungsart habe ich mit Hilfe einer RadioButtonList bewerkstelligt. Da bei der RadioButtonList Control ohnehin nur ein Wert im Listeneintrag (<asp:ListItem> ... </asp:ListItem>) gültig ist, brauche ich mit dem RequiredFieldValidator nur mehr überprüfen, ob überhaupt eine Auswahl getroffen wurde.

Für den Fall, daß Sie einen fixen Wert mit einer Benutzereingabe vergleichen müssen, dann bietet sich die CompareValidator Control an.

CompareValidator

Als Beispiel sollen zwei Textbox Controls dienen, deren Inhalt miteinander verglichen wird. Um das Beispiel auf Ihrem Webserver auszuprobieren, greifen Sie mit Hilfe eines Browsers auf die Datei CompareValidator.aspx zu.

<form runat="server">
<table cellpadding=10 border="2">
    <tr valign="top">
      <td align=left>Box 1:</td>
      <td>
        <asp:TextBox id="txtBox1" runat="server" />
      </td>
    </tr>
    
    <tr> 
    <td align="left">Box 2:</td>
      <td>
        <asp:TextBox id="txtBox2" runat="server" />
      </td>
    </tr>
    
    <tr>
      <td colspan=2>
      <asp:CompareValidator id="Compare" 
              operator="Equal"
	      ControlToValidate="txtBox1" 
              ErrorMessage="Inhalte sind nicht gleich!"
              ControlToCompare ="txtBox2" 
              type="String"
	          display="static"
              runat="server">
      </asp:CompareValidator>
      </td>
	 </tr>
     
      <tr>
      <td colspan=2>
        <asp:Button id=Button1 text="Testen" runat="server" />
      </td>
    </tr>
</table>
</form>

Bei diesm Beispiel wir der Inhalt der TextBox txtBox1 mit dem Inhalt der TextBox txtBox2 verglichen. Trifft der Fall ein, daß die beiden String ungleich sind wird die Fehlermeldung die im Attribut ErrorMessage (hier: Inhalte sind nicht gleich!) ausgegeben. Das Attribut type gibt dem Validator an, welcher Datentyp verwendet wird. Durch Verwendung des Attributs display="static" wird gewährleistet, daß es zu keiner Verschiebung des Layouts kommt, wenn keine Fehlermeldung ausgegeben wird.

Als Nächstes wollen wir nicht nur einfache, vorgegebene Vergleiche, sondern bestimmte Gesetzmäßigkeiten überprüfen.

RegularExpressionValidator

Dieser Validator vergleicht die Benutzereingabe mit einem vorgegebenen regulären Ausdruck. Verwendung findet dieser z.B für die Gültigkeitsüberprüfung von Telefonnummern oder Postleitzahlen. Als Beispiel soll hier ein String überprüft werden, der nur Großbuchstaben enthalten darf und sechs Zeichen lang ist.

<asp:RegularExpressionValidator id="RegExVal" runat="server"
            ControlToValidate="txtBox1"
            ValidationExpression="[A-Z]{6}"
            Display="Static"
            ErrorMessage="String ist ungültig">
        </asp:RegularExpressionValidator>

Das Attribut ValidationExpression gibt den regulären Ausdruck an. Dieser enthält die Bedingungen für Großbuchstaben ([A-Z]) und für eine Stringlänge von 6 Zeichen ({6})

RangeValidator

Wenn Sie sicherstellen wollen, daß ein Wert in einen speziellen Wertebereich fällt, so kommt der RangeValidator zum Einsatz.

<asp:RangeValidator id="RangeVal1" runat="server"
  controlToValidate="txtRange"
  type="Integer"
  minimumValue="1"
  maximumValue="10"
  ErrorMessage="Zahl ist außerhalb des Bereiches">
<asp:RangeValidator/>

Hier wird überprüft, ob der eingegebene Wert der Textbox txtRange zwischen 1 und 10 liegt. Die Grenzen werden definiert durch den minimalen Wert (minimumValue) und den maximalen Wert (maximumValue).

Es kann natürlich auch vorkommen, daß Sie Funktionen benötigen die Ihren eigenen Ansprüchen gerecht werden müssen. Hierfür verwenden Sie den CustomValidator.

CustomValidator

Mit dem CustomValidator können Sie z.B. Textboxen auf Gültigkeit Ihrer selbst gewählten Kriterien überprüfen. Das folgende Beispiel überprüft, ob der User eine gerade (gültige Eingabe) oder ungerade Zahl (ungültige Eingabe) eingegeben hat. In der CustomValidator Control wird die Funktion IsNumberEven aufgerufen, die die eingegebene Zahl überprüft.

<form method="post" runat="server">

   Enter a number to check whether it's even or not:<br><br>
   <asp:TextBox id="txtBox" runat="server"/>
   <asp:Button text="Check" runat="server"/>
        
    <asp:CustomValidator id="CustomValidator1" runat="server"
        ControlToValidate="txtBox"
        OnServerValidationFunction="IsNumberEven"
        Display="Static"
	ErrorMessage="Zahl ist ungerade!">
    </asp:CustomValidator>
  
</form>

Die Funktion IsNumberEven

<script language="C#" runat="server">
void IsNumberEven(object source, ServerValidateEventArgs value)
{
   int nChkNum = Int32.Parse(value.Value);
            
   if (nChkNum%2 == 0)
   {
      value.IsValid = true;
   }        
   else
   {
      value.IsValid = false;
   }
}
</script>

Schlußbemerkung

In diesem Artikel wurden Ihnen die Grundtypen der Validation Controls vorgestellt, die ASP.NET zur Verfügung stellt, um Benutzereingaben zu überprüfen. In Teil 2 der Serie werden wir folgende Themen behandeln:

Mehrfach Überprüfungen
Oft tritt auch der Fall ein, daß Benutzereingaben mehreren Gültigkeitsbestimmungen unterliegen müssen, wie z.B. eine online-Softwareregistrierung. Abgesehen vom Algorithmus der das Produkt eindeutig identifizert, könnten Sie eine "Vorvalidierung" einrichten, bevor Sie dem Benutzer aufgrund eines Tippfehlers die BSA wegen Softwarepriaterie auf den Hals hetzen. Diese überprüft die Eingabe auf mögliche Tippfehler oder das Vorhandensein spezieller Buchstaben. Es soll ja vorkommen, daß Benutzer eine gültige Lizenz besitzen sich aber einfach nur vertippen.

Die ValidationSummary Control und die IsValid Eigenschaft
Bei umfangreichen Eingabeformularen, z.B. bei Produktregistrierungen oder Versandinformationen, gibt es die Möglichkeit der Verwendungen der sogenannten ValidationSummary Control, welche erst nach erfolgter Dateneingabe des Clients und dessen Bestätigung (z.B. durch Klicken des "Abschicken"-Buttons), alle Felder validiert und dann Fehler auflistet. In Kombination mit der IsValid Eigenschaft des Page-Objekts können dann zusätzliche Events (z.B. Datenübergabe in eine Datenbank) getriggert werden.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000911.zip

Verwandte Artikel

Einführung in ASP.NET Validation Controls (Teil 2)
http:/www.aspheute.com/artikel/20000913.htm
Einführung in ASP.NET Web Forms
http:/www.aspheute.com/artikel/20000808.htm
Einstieg in Visual Studio.NET - die erste Webanwendung mit Visual C#
http:/www.aspheute.com/artikel/20031010.htm
Eventbehandlung bei ASP.NET WebForms
http:/www.aspheute.com/artikel/20000922.htm
Formularbasierte Authentifizierung in fünf Minuten
http:/www.aspheute.com/artikel/20020705.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.