Validering av forms i ASP.NET 2.0

Å validere data er nødvendig på alle websider som samler data fra brukere. I denne artikkelen går vi gjennom alle 6 validatorkontrollene i ASP.NET 2.0 og ser hvordan de kan brukes.

ASP.NET inneholder et lite knippe med server controls for at det skal bli enkelt å validere brukeres input i forms/skjemaer. En webapplikasjon bør alltid validere brukerens input for å unngå feilmeldinger og feil data. For å sikre at vi samler riktig data fra brukeren kan vi validere dataene og dermed sikre at en email-adresse hvertfall ligner på en mailadresse og at brukeren ikke taster inn bokstaver der man skal fylle inn telefonnummer osv.

Validering av data er delt opp i 2 kategorier. Serverside og clientside validering. Clientside validering er å validere dataene før de sendes til serveren. Dette gjøres ofte vha javascript. Serverside validering foregår etter at brukeren har sendt dataene. Dette er sikrere, men er mer stress for serveren.

ASP.NET har innført en smart måte å validere data på. Validerings kontrollene i ASP.NET kan validere både clientside og serverside.

ASP.NET Validering kontroller

  • RequiredFieldValidator
  • CompareValidator
  • RangeValidator
  • RegularExpressionValidator
  • CustomValidator
  • ValidationSummary

RequiredFieldValidator

RequiredFieldValidator er en simpel kontroll som rett og slett sjekker at det er data i et felt eller ikke. I kodeeksempelet under er dat laget et enkelt skjema med en tekstboks der brukere må taste inn data i tekstboksen.

<form id="form1" runat="server">
  <div>
    <asp:TextBox ID="txt" runat="server"></asp:TextBox>
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" 
         runat="server" ErrorMessage="Mangler data!" ControlToValidate="txt" />
    <asp:Button ID="btn" runat="server" Text="Submit" CausesValidation="true"/>
  </div>
</form> 

Dersom du vil sjekke flere tekstbokser trenger du en RequeiredFieldValidator kontroll for hver tekstboks. Og selvsagt endre attributten ControlToValidate

CompareValidator

CompareValidator lar deg sammenligne verdier fra to kontroller. Den er ofte brukt når en bruker skal oppgi emailadresse eller et passord. Man ber brukeren taste disse verdiene to ganger for å unngå skrivefeil. Deretter bør man validere disse feltene for å sjekke at det er oppgitt samme verdi. I eksempelet under er det satt opp et enkelt skjema med 2 tekstbokser.

<p>
 Passord:<br/>
 <asp:TextBox ID="txt1"  TextMode="Password" runat="server"/>
</p>

<p>
 Gjenta passord:<br/>
 <asp:TextBox ID="txt2" TextMode="password" runat="server" />
</p>

<p>
 <asp:Button ID="btn1" runat="server" Text="Login"/>
</p>

<p>
 <asp:CompareValidator ID="CompareValidator1" runat="server" 
   ErrorMessage="Passordene er ikke like" ControlToValidate="txt1" ControlToCompare="txt2" />
</p>

RangeValidator

Denne validatorkontrollen sjekker at en verdi er innenfor to andre verdier. Dersom du vil at brukeren skal oppgi et tall mellom 1 og 10 kan denne kontrollen være nyttig. Den kan også brukes til validering av telefonnummer mm.

<asp:RangeValidator ID="RangeValidator1" runat="server" 
     ErrorMessage="Verdien må være mellom 1 og 10" ControlToValidate="txt" 
     Type="Integer" MinimumValue="1" MaximumValue="10" />
<asp:TextBox ID="txt" runat="server"></asp:TextBox>
<asp:Button ID="CheckRange" runat="CheckRange" Text="Button" />

RangeValidator kan også validere tekst og datoer mm.

RegularExpressionValidator

Med denne validator kontrollen kan du sjekke brukerens input vha regulære uttrykk. Dette gjør at denne kontrollen kan sjekke nærmest hva som helst av data. Ved å oppgi ControlToValidate sammen med en ValidationExpression kan du sjekke alt fra gyldige telefonnummer til emailadresser mm.

<asp:TextBox ID="txt" runat="server" />
<asp:RegularExpressionValidator ID="RegularExpressionValidator1"  ControlToValidate="txt" runat="server" 
     ErrorMessage="Ugyldig mailadresse" 
     ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" />
<asp:Button ID="btn" runat="server" Text="CheckMail"/>  

Regulære uttrykk kan være vanskelig å lære seg, men i Visual Studio følger det med en en Regular Expression Editor med en del ferdige uttrykk som kan brukes. I design mode kan du åpne denne og bruke de uttrykk som ligger der.

CustomValidator

Noen ganger trenge man å validere data som ikke treffer helt til de ferdige kontrollene i ASP.NET 2.0. Da trenger man CustomValidator. Med denne kontrollen kan du skrive egne clientside eller serverside valideringsfunksjoner. I eksempelet under er det satt opp en validering som sjekker at tallet i tekstboksen kan deles med 8.

<asp:CustomValidator ID="CustomValidator1" runat="server" 
        ControlToValidate="txt" ClientValidationFunction="validateNumber" 
        ErrorMessage="Kan ikke deles på 8" />
        <asp:TextBox ID="txt" runat="server" />
        <asp:Button ID="btn" runat="server" Text="Divisible" />
 
<script type="text/javascript">
function validateNumber(oSrc,args)
{
  args.IsValid = (args.Value % 8 == 0)
}
</script>

I selve javascriptfunksjonen kan man skrive hvordan kode man vil så lenge funksjonen returnerer args.IsValid som true eller false

ValidationSummary

ValidationSummary er en repeater kontrol som brukes av de andre validatorkontrollene på siden. Med denne kontrollen kan du samle alle feilmeldingene et sted feks i en liste. Hvis du har en side med noe validatorkontroller kan du legge til en ValidationSummary og teste den ut.

<asp:ValidationSummary ID="ValidationSummary1" 
   DisplayMode="BulletList"  
   HeaderText="Følgende feil oppstod" 
   runat="server" />