ASPNL logo (1 kb)
Tuesday, September 07, 2010




Microsoft MVP

.NET Codewise Community
<< vorige | overzicht | volgende >>

Invoer van gebruikers valideren

Door Johan Theunissen
11 juli 2003

Tegenwoordig heeft bijna iedere website wel een invulformulier voor het versturen van gegevens, het plaatsen van een bericht in een gastenboek etc. Hoe kunnen we binnen ASP.NET ervoor zorgen dat deze gegevens voldoen aan onze eisen?
Het antwoord hierop is simpel: Validation Controls.

Voordat je direct aan de slag gaat met de code is het belangrijk om eerst een schema te maken waarin je alle invulvelden maakt en de voorwaarden waar deze aan moeten voldoen. Dit lijkt extra werk, maar vooral bij veel velden of als je een project bij een klant hebt, heb je beter overzicht en het ziet er professioneel uit. Laat de klant desnoods akkoord geven voor je voorstelschema. Dit scheelt discussie en problemen achteraf.

Als de gegevens een database ingaan dan kun je het schema van de database gebruiken. Zorg er altijd voor dat de voorwaarden die voor invoer in de database gelden ook voor de invulvelden gelden.

Voorbeeld schema

Naam Type Vereist Voorwaarden
Voornaam Letters Ja Niet langer dan 20 karakters
Tussenvoegsel Letters Nee Niet langer dan 10 karakters
Achternaam Letters Nee Niet langer dan 50 karakters
Huisnummer Numeriek Nee Tussen 0 en 9.999
Niet langer dan 4 karakters
Geboortedatum Datumnotatie Nee Tussen 1900 en 2003
Niet langer dan 8 karakters

Laten we nu naar de Validation Controls kijken.
In ASP.NET gebruiken we 6 verschillende Validation Controls:

  1. RequiredFieldValidator
  2. CompareValidator
  3. RangeValidator
  4. RegularExpressionValidator
  5. CustomValidator
  6. ValidationSummary

RequiredFieldValidator

De RequiredFieldValidator gebruiken we als een invulveld verplicht moet worden ingevuld. We gebruiken hiervoor de volgende code:

<asp:RequiredFieldValidator
   runat="server"
   id="rfvTxtName"
   controlToValidate="txtName"
   errorMessage="U moet iets invullen!"
   display="static"
>
foutmelding tekst
</asp:RequiredFieldValidator>

De tag-naam die we hiervoor gebruiken is dus asp:RequiredFieldValidator. Wat de attributen (eigenschappen) betekenen behandelen we hieronder:

runat="server"
Is verplicht en zorgt ervoor dat de code op de server wordt uitgevoerd.

id="rfvTxtName"
Is verplicht en is een unieke naam voor deze ene Validator control.

ControlToValidate="txtName"
Is verplicht en verwijst naar het invulveld met de id="txtName". De control hoeft dus niet bij het invulveld te staan, kan ook ergens anders op de pagina.

ErrorMessage="U moet iets invullen!"
Is melding die geplaatst wordt in de ValidationSummary. Als er geen tekst staat binnen de tags van de control (waar nu "foutmelding tekst" staat), wordt de waarde errorMessage ook weergegeven als foutmelding tekst (afhankelijk van de waarde van de display eigenschap).

Display="static"
De display eigenschap heeft 3 mogelijke waarden: Static, dynamic of none. Static zorgt ervoor dat de ruimte voor de foutmelding al gereserveerd is. Dynamic zorgt ervoor dat er geen ruimte is voor de foutmelding, maar dat deze pas ingevoegd wordt wanneer dit nodig is. None laat geen foutmelding zien, en laat dit over aan een ValidationSummary control.

Foutmelding tekst
Deze tekst staan tussen de open en sluit tag van de RequiredFieldValidator-control, en wordt weergegeven wanneer de waarde van het gecontroleerde veld fout is volgens de validatie control. Standaard verschijnt deze tekst in de kleur rood. Indien er geen tekst tussen de open en sluit tags staat, wordt de waarde van de ErrorMessage eigenschap weergegeven.

CompareValidator

De CompareValidator gebruiken we als ingevulde gegevens verplicht een specifieke waarde moeten zijn. Of als we de ingevulde gegevens willen vergelijken met de ingevulde gegevens van een andere control. (bijv. bij het dubbelchecken van een wachtwoord). Daarnaast kunnen we een controle uitvoeren of de ingevulde waarde voldoet aan een bepaalde type. (bijv. string of numeriek) We gebruiken hiervoor de volgende code:

<asp:CompareValidator
   runat="server"
   id="comvTxtName"
   controlToValidate="TextBox1"
   'ControlToCompare="TextBox2"
   errorMessage="U dient een numerieke waarde in te vullen!"
   type="Double"
   operator="DataTypeCheck"
   display="static"
>
foutmelding tekst
</asp:CompareValidator>

De tag-naam die we hiervoor gebruiken is dus asp:CompareValidator. Wat de attributen (eigenschappen) betekenen behandelen we hieronder:

ControlToCompare="TextBox2"
Verwijst naar het invulveld dat wel willen vergelijken met TextBox1. In dit geval is deze eigenschap als commentaar geplaatst, aangezien we alleen een type check uitvoeren (zie hieronder).

type="Double"
Type geeft aan van welk type de ingevulde waarde moet zijn. Mogelijke waarden zijn: String, Integer, Double, DateTime, Currency.

operator="DataTypeCheck"
De eigenschap operator vergelijkt de ingevulde waarde met een andere ingevulde waarde of met het type waarde. Mogelijke waarden zijn: Equal, NotEqual, GreaterThan, LessThan, GreaterThanEqual, LessThanEqual, DataTypeCheck

De andere eigenschappen zijn al behandeld bij de RequiredFieldValidator.

RangeValidator

De RangeValidator controleert of de ingevulde gegevens waarde binnen een bepaald gebied liggen. We gebruiken hiervoor de volgende code:

<asp:RangeValidator
   runat="server"
   id="RangeValidator1"
   ControlToValidate="txtName"
   Type="integer"
   MinimumValue="0"
   MaximumValue="999"
   ErrorMessage="Foutieve invoer"
   Display="Dynamic"
>
Foutmelding tekst
</asp:RangeValidator>

De tag-naam die we hiervoor gebruiken is dus asp:RangeValidator. Wat de attributen (eigenschappen) betekenen behandelen we hieronder:

MinimumValue="0"
Geeft de minimale waarde aan die ingevuld kan worden.

MaximumValue="999"
Geeft de maximale waarde aan die ingevuld kan worden.

De type eigenschap is al behandeld bij de CompareValidator. De overige eigenschappen zijn behandeld

RegularExpressionValidator

De RegularExpressionValidator controleert of de ingevulde gegevens waarde aan een bepaald patroon voldoen. Bijvoorbeeld 1 tot 3 karakters, ma/di/wo/do/vr, alleen de cijfers 4, 7, 8 en 9, of een email-adres. We gebruiken hiervoor de volgende code:

<asp:RegularExpressionValidator
   runat="server"
   id="regvID"
   controlToValidate="txtName"
   errorMessage="Vul een aantal tussen 0 en 999!"
   validationExpression="\d{1,3}"
   display="static"
>
Foutmelding tekst
</asp:RegularExpressionValidator>

De tag-naam die we hiervoor gebruiken is dus asp:RegularExpressionValidator. Behoudens de eigenschap validationExpression zijn alle eigenschappen al behandeld bij de RequiredFieldValidator. De validationExpression bevat een expressie die het patroon beschrijft waar de ingevulde waarde aan moet voldoen. Dit is een regular expression zoals die ook in andere talen (bijvoorbeeld Perl) gebruikt worden. Regular expressions kunnen ontzettend veel mogelijke patronen beschrijven. Met ASP.NET Web Matrix of Visual Studio .NET heb je de keuze uit een aantal voorgedefinieerde expressies. http://regxlib.com is een bibliotheek van expressies waar je naar expressies kunt zoeken, en zelf expressies kunt toevoegen. Ook kun je meer details vinden door te zoeken op "regular expressions" op www.google.com of www.microsoft.com.

CustomValidator

Als de andere validators niet voldoen aan onze eisen, dan kunnen we met de CustomValidator een eigen validator bouwen. Deze kan bestaan uit een server-side check of uit een server-side en client-side check. De details van een CustomValidator vallen buiten de scope van dit artikel.

ValidationSummary

Met de ValidationSummary kunnen we de foutmeldingen van alle validators op één centrale plaats plaatsen. Hier komen de foutmeldingen te staan die aangegeven zijn binnen de Validators als errorMessage.

<asp:ValidationSummary
   runat="server"
   id="valSummary"
   headerText="Please correct the following errors"
   showSummary="true"
   displayMode="BulletList"
/>

headerText="Please correct the following errors"
Dit is de titel tekst die boven de lijst met foutmeldingen komt te staan.

showSummary="true"
Geeft aan of de lijst moet worden getoond. Normaal gezien staat deze op true, maar als je een pop-up window wilt laten zien in plaats van foutmeldingen in de pagina, dan kun je hier false opgeven, en showMessageBox="true" gebruiken.

displayMode="BulletList"
De manier waarop de lijst met foutmeldingen wordt getoond. Mogelijke waarden zijn: List, BulletList (standaard) en SingleParagraph.

Extra wetenswaardigheden

De Control Validators controleren de ingevulde waarden aan de server-kant. Als de client DHTML ondersteund dan worden de ingevulde waarden ook aan de client-kant gevalideerd door automatisch gegenereerde JavaScript-code. Dit heeft als voordeel dat gegevens gecontroleerd worden voordat er gegevens naar de server gestuurd worden en dat scheelt weer in de prestatie van de website.

Bovenstaande Validators maken gebruik van de meest belangrijke eigenschappen. Uiteraard zijn er nog heel veel anderen. Kijk voor meer eigenschappen van Validation Controls op de site van Microsoft, of in de documentatie van de .NET Framework SDK of Visual Studio .NET.

<< vorige | ^ naar boven | overzicht | volgende >>
copyright 2000-2007 ASPNL