ASP.NET Tutorial, Part 10 - Validering

Tags:    asp.net
Skrevet af Bruger #7741 @ 11.07.2005
I forrige lektion kiggede vi på et eksempel med en større formular til dataindsamling, men som nævnt lider formularen under manglede fejlhåndtering. Der mangler blandt andet en generel fejlhåndtering som sikrer, at funktionen PMT (beregner ydelser på et annuitetslån) ikke bliver kaldt med forkerte argumenter. En typisk fejl kunne eksempelvis være brug af en negativ værdi, for stor nominel rente eller for mange terminer.


Figur 1 Beregning af ydelse.

Det kan godt være en tung sag selv at skulle skrive valideringskode til at kontrollere data fra de forskellige kontroller på siden, men heldigvis indeholder ASP.NET kontroller til at klare det hårde arbejde. De er faktisk så effektive, at man i de fleste tilfælde ikke behøver skrive nogen kode overhovedet.

Valideringskontroller


Der findes fem forskellige valideringskontroller i ASP.NET:

[table][tr][td]Kontrol[/td][td]Beskrivelse[/td][/tr][tr][td]CompareValidator[/td] [td]Kan bruges til at sammenligne to forskellige kontroller.[/td][/tr][tr][td]CustomValidator[/td] [td]Kan bruges til at skrive egen validerings-funktion.[/td][/tr][tr][td]RangeValidator[/td] [td]Kan bruges til at sikre, at en kontrol indeholder en værdi inden for et givet område.[/td][/tr][tr][td]RegularExpressionValidator[/td] [td]Kan bruges til at validere med RegEx (regular expression).[/td][/tr]
[tr][td]RequiredFieldValidator[/td] [td]Kan bruges til at sikre, at en kontrol indeholder data.[/td][/tr][/table]

Fælles for dem alle er en samling egenskaber og metoder (skyldes at de nedarver fra samme klasse kaldet BaseValidator):

[table][tr][td]Medlem[/td] [td]Beskrivelse[/td][/tr]
[tr][td]ControlToValidate[/td] [td]Reference til den kontrol man ønsker at validere.[/td][/tr]
[tr][td]Display[/td] [td]Egenskab der fortæller hvordan en eventuel fejlmeddelelse skal vises. Mulighederne er som følger:
- None: Ingen fejlmeddelelse vises.
- Static: Der gøres plads i HTML-designet
til fejlmeddelelse på forhånd.
- Dynamic: Der gøres kun plads
til fejlmeddelelse hvis validering fejler.[/td][/tr]
[tr][td]EnableClientScript[/td] [td]Ved Sand benyttes validering på klientplan når det er muligt ved hjælp af JavaScript. Ved Falsk foretages valideringen på serverplan. Egenskaben er Sand som default.[/td][/tr]
[tr][td]ErrorMessage[/td] [td]Den fejlmeddelelse der skal vises ved fejl.[/td][/tr] [tr][td]IsValid[/td] [td]Sand eller Falsk-værdi der viser om data i kontrollen er valide.[/td][/tr][tr][td]Text[/td] [td]Den tekst som ønskes angivet hvis ikke fejlmeddelelsen skal vises ud for kontrollen.
Egenskaben bruges især i forbindelse med brug af ValidationSummary-kontrollen som vi kigger på i næste lektion.
Værdien kan eksempelvis være en "*" som blot markerer at der er sket en valideringsfejl, hvorefter selve fejlmeddelelsen kan findes længere nede på siden.[/td][/tr][tr][td]Validate()[/td] [td]Gennemtvinger en validering, og opdaterer IsValid-egenskaben.[/td][/tr][table]

Vi vender senere tilbage til EnableClientScript (validering med DHTML).

Der kan valideres flere forskellige typer af kontroller - herunder TextBox, ListBox og DropDownList. Validering bliver dog hovedsageligt brugt på tekstbokse.

RequiredFieldValidator


Kontrollen kan som beskrevet benyttes til at sikre at en kontrol indeholder en eller anden værdi, men validerer ikke eventuelt indhold. Den bruges normalt sammen med en af de andre valideringskontoller.

Syntaksen på opmærkningsplan er som følger:
Fold kodeboks ind/udKode 


Siden består af en tekstboks, en valideringskontrol (RequiredFieldValidator) og en knap. Når der klikkes på knappen, foretages valideringen, og hvis tekstboksen er tom, vises en fejlmeddelelse.


Figur 2 Validering med RequiredFieldValidator.

Som tidligere nævnt vil valideringen som standard blive foretaget på klientplan (det vil sige i browseren). Det vil dog kun ske hvis browseren kan håndterer DHTML.

Validering på klientplan har flere fordele. For det første går det hurtigt (der skal ikke noget forbi serveren i en postback - alt sker i browseren), og for det andet behøver man som udgangspunkt ikke teste om alle kontroller på siden indeholder korrekte værdier. Hvis der sker en valideringsfejl vil siden aldrig blive sendt til serveren, og man behøver således som udgangspunkt ikke foretage en test på om alle kontroller er valide.

Anderledes forholder det sig hvis validering sker på serverplan (EnableClientScript=False). Her bliver siden sendt forbi serveren for at foretage valideringen, og man må selv sørge for at checke status på valideringen. Det kan ske ved hjælp af IsValid-egenskaben.
Se følgende side:
Fold kodeboks ind/udKode 

Siden består af en tekstboks, valideringskontrol, knap og en etiket. Bemærk, at valideringskontrollen er sat til at validere på serverplan.

Når der klikkes på knappen, er det meningen at der fra det navn der er indtastet i tekstboksen, skal findes det første bogstav fra venstre, og det skal konverteres til et stort bogstav og skrives i etiketten. Følgende kode kan benyttes:
Fold kodeboks ind/udKode 

Bemærk brugen af IsValid-egenskaben som fortæller om alle kontroller er valide.
Såfremt tekstboksen ikke blev valideret med en RequiredFieldValidator-kontrol, ville siden fejle hvis tekstboksen var tom når der blev klikket på knappen (man kan ikke finde det første tegn i en tom streng).

RangeValidator


RangeValidator-kontrollen kan bruges til at sikre, at værdier ligger imellem en minimums- og en maksimumsgrænse. Eksempelvis kan den bruges til at validere at en indtastet dato ligger mellem 1/1-2004 og 31/12-2004, eller at en indtastet talværdi er mellem 0 og 100.000.

Kontrollen består af et par nye egenskaber i forhold til RequiredFieldValidator-kontrollen:

[table][tr][td]Egenskab[/td] [td]Beskrivelse[/td][/tr][tr][td]MinimumValue[/td] [td]Den mindste tilladte værdi.[/td][/tr][tr][td]MaximumValue[/td] [td]Den største tilladte værdi.[/td][/tr]
[tr][td]Type[/td] [td]Angiver hvilken variabeltype der ønskes valideret. Mulige værdier er:
- String
- Integer
- Double
- Date
- Currency[/td][/tr]
[/table]

På opmærkningsplan kan kontrollen beskrives som:

Fold kodeboks ind/udKode 


Ønsker man eksempelvis at en dato indtastet i TextBox1 skal være i 2004, kan kontrollen initialiseres som følger:

Fold kodeboks ind/udKode 


eller at et heltal skal være mellem 1 og 100:

Fold kodeboks ind/udKode 


Man skal dog være opmærksom på, at valideringen ikke fejler hvis der ikke er tastet noget ind i eksempelvis en tekstboks. Her må man kombinere en RangeValidator-kontrol med en RequiredFieldValidator-kontrol - eksempelvis som følger:

Fold kodeboks ind/udKode 

På den måde sikrer man, at der for det første skal være tastet noget ind i TextBox1, og at det skal være en dato i 2004.

Hvor typerne Date (dato), Integer (heltal), Double (decimaltal) og Currency (decimaltal med definition af valuta - eksempelvis kr. 100.000) er oplagte typer til kunne placere mellem en minimums- og en maksimumsværdi, er String-typen lidt anderledes. Den kan bruges hvis man ønsker at teste at en strengværdi ligger i et konkret interval. Eksempelvis vil en minimumsværdi på "A" og en maksimumsværdi på "D" kun accepterer A, B, C og D. Som vi skal se senere, er der dog andre og bedre måder at validere strenge på.

Her følger et kort eksempel på anvendelse af RangeValidator-kontrollen:
Fold kodeboks ind/udKode 

Opmærkningerne producerer følgende side:


Figur 3 Brug af RangeValidator-kontrollen.

I næste lektion kigger vi på nogle af de andre valideringskontroller, og slutteligt på ValidationSummary-kontrollen som kan bruges til at samle alle fejlmeddelelser på et sted.


Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (0)

Du skal være logget ind for at skrive en kommentar.
t