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

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

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

Geschrieben von: Christian Holm
Kategorie: ASP.NET

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:

  • Die Validierung wird server-seitig durchgeführt - spezielles Client-Script unnötig (kann aber verwendet werden)
  • Fehlermeldungen können sofort bei Fehlern ausgegeben werden bzw. erlöschen nach gültiger Eingabe
  • Ein Postback zum Server kann beim Auftreten von Eingabefehlern verhindert werden, um die Serverbelastung gering zu halten
  • Die Client Validierungslogik ist in der JScript-Bibliothek enthalten - deshalb sind weder ActiveX Komponenten noch Java Applets nötig
  • Die Gültigkeitsbestimmungen lassen sich mit Hilfe von VBScript an Ihre speziellen Wünsche anpassen

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:

  • RequiredFieldValidator / Eingabeforderungs-Validator
  • CompareValidator / Vergleichs-Validator
  • RegularExpressionValidator / Regulärerausdrucks-Validator
  • RangeValidator / Bereichs-Validator
  • CustomValidator / benutzerdefinierter Validator

In weiteren Artikeln werden wir noch behandeln:

  • Mehrfach-Überprüfungen
  • Die ValidationSummary Control und die IsValid Eigenschaft

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.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Einführung in ASP.NET Validation Controls (Teil 2)
Einführung in ASP.NET Web Forms
Einstieg in Visual Studio.NET - die erste Webanwendung mit Visual C#
Eventbehandlung bei ASP.NET WebForms
Formularbasierte Authentifizierung in fünf Minuten

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Eine weitere sehr hilfreiche Resource ist das deutsche ASP.NET Wiki, das als zentrale Anlaufstelle für Tips, Tricks, Know How und alles Nützliche was man in seinem Alltag als (ASP).NET-Entwickler so braucht und entdeckt gedacht ist.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

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