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:
- RequiredFieldValidator
- CompareValidator
- RangeValidator
- RegularExpressionValidator
- CustomValidator
- 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.
|