Antonio Feliziani
a- a+

Utilizzare i Validation Controls

Quando viene realizzato un Web Forms, per lo sviluppatore risulta estremamente semplice ed immediato capire quali valori possono essere inseriti in ogni singolo campo ma, spesse volte, il comportamento degli "utilizzatori finali" è differente; si rivela quindi molto importante prevedere tutti i possibili errori che possono essere generati durante la compilazione dei campi; ASP.NET aiuta a gestire questi eventi attraverso i Validation Controls.

Come usare i Validation Controls nei Web Forms

Grazie ai Validation Controls è possibile controllare le informazioni inserite nei vari campi dei Web Forms e visualizzare eventuali messaggi di errore e, soprattutto, non inviare la pagina se tutti campi non soddisfano alle condizioni impostate nei Validation Controls.

I Validation Controls possono essere eseguiti sia in modalità Server side che in modalità Client Side; se il browser utilizzato supporta DHTML, verranno automaticamente gestiti in modalità Client side (al fine di ridurre il carico di lavoro del Server).

I validator attualmente attivi sono i seguenti:

-

Controlla se il campo contiene un valore
-

Controlla se il campo contiene un intervallo numerico
-

Controlla se il valore contenuto nel campo corrisponde ad un valore
-

Controlla se il valore del campo corrisponde ad una specifica espressione
-Viene eseguita una convalida definita dall'utente
-Visualizza un elenco di tutti gli errori di convalida

Per verificare la validità dei valori inseriti nei campi presenti nel Form, basterà semplicemente inserire uno o più Validation Control ( ) per ogni Campo che si desidera controllare.

Per gestire un Validation Control sono disponibili le seguenti proprietà principali:

-

ControlToValidateNome del controllo (campo) da validare
-TextImposta il messaggio di errore da visualizzare. Il messaggio di errore verrà visualizzato nel punto esatto in cui si trova il comando di convalida.

-

ErrorMessageImposta il messaggio di errore visualizzato nel controllo ValidationSummary.

-

DisplaySe il controllo è stato inserito in una tabella, impostando la proprietà a static, è possibile evitare che la lunghezza della colonna subisca delle modifiche in seguito alla visualizzazione del comando di convalida; al contrario se viene impostato a dymamic la colonna potrà subire delle modifiche in seguito alla visualizzazione del messaggio di errrore.

ed altre proprietà specifiche o appartenenti a determinati Validation Controls:

-

ControlToCompareCampo di confronto per il Compare Validator

-

ValuelToCompareValore di confronto per il Compare Validator

-

ValidationExpressionIndica l'espressione del testo da convalidare

-

ClientValidationFunctionProprietà del controllo Custom Validator

-

OnServerValidateProprietà del controllo Custom Validator

-

DisplayModeModalità di visualizzazione del Validation Summary

-

Header TextIntestazione del Validation Summary

-

ShowSummaryAttivazione del Validation Summary

-

ShowMessageBoxConsente di visualizzare gli errori del Validation Summary in una finestra di Windows

-

TypeIndica il tipo del campo da gestire (Currency, DateTime, Double, Integer, String)

-

OperatorOperatore di confronto fra due valori (Equal, NotEqual, GreaterThan ecc...)

-

ForeColorConsente di impostare il colore del messaggio di errore (Red, Green ...)

-

EnabledConsente di attivare/disattivare il controllo su un campo

-

IsValidRestituisce un valore (true/false) che indica se il campo ha passato il test di convalida

-

ValidateEffettua la convalida su un campo ed aggiorna la proprità IsValid

La differenza tra la proprietà Text e la proprietà ErrorMessage è che Text viene utilizzata per visualizzare il messaggio di errore accanto al controllo, ErrorMessage viene invece utilizzata per visualizzare il messaggio di errore nel Validation Summary (elenco degli errori di validazione del Form); nel caso in cui non sia stata impostata la proprietà Text, verrà visualizzato il messaggio presente in ErrorMessage.

Required Field Validation Control

Attraverso questo controllo è possibile rendere obbligatorio (diverso da blank) un determinato campo:

Inserire il Nome:

ControlToValidate="txtNome"  ErrorMessage="(*) Errore... Il campo NOME è un campo obbligatorio!"  ForeColor="Red">


Come è facile intuire, il controllo "Required Field Validator" viene spesso associato ad altri Validation Controls, in questo modo è possibile controllare sia il fatto che il campo non può essere vuoto (Required Field Validator) sia altre condizioni.

Range validation control

Il Range Validator consente di verificare che il valore inserito sia compreso fra due valori specificati (quindi del tipo da ... a ...); per ottenere questo risultato basterà utilizzare le proprietà MaximunValue eMinimunValue, in aggiunta alla proprietà Type che consente di specificare il tipo (dataype) del valore da gestire.


Inserire un numero tra 1 e 10:

ControlToValidate="txtNumero"  MinimumValue="1"  MaximumValue="10"  Type="Integer"  ErrorMessage="(*) Errore... Il numero deve essere compreso tra 1 e 10!"  ForeColor="Red" >

Compare validation control

Questo controllo presenta diversi ambiti di applicazione, consente di verificare:

-il tipo (datatype) di un campo (Currency, DateTime, Double, Integer, String)
-l'uguaglianza di due campi, utilizzando gli operatori (Equal, NotEqual, GreaterThan ecc...)
-l'uguaglianza di un campo rispetto ad un valore fisso, utilizzando gli operatori (Equal, NotEqual, GreaterThan ecc...)


Controllo sul tipo (datatype) di un campo:
 

Inserire l'età:
ControlToValidate="txtAnni"   Type="Integer"   Operator="DataTypeCheck"   ErrorMessage="(*) Errore... Inserire un numero!"   ForeColor="Red" >


Confronto tra due campi:


Inserire l'indirizzo Email:



Re-inserire l'indirizzo Email:

ControlToValidate="txtEmail1"  ControlToCompare="txtEmail"  Type="String"  Operator="Equal"  ErrorMessage="(*) Errore... Controllare l'indirizzo Email inserito!"  ForeColor="Red" 


Confronto fra un campo ed un valore fisso:



Inserire una Data:

ControlToValidate="txtData"  ValueToCompare="01/01/2004"  Operator="GreaterThan"  Type="Date"  ErrorMessage="(*) Errore... La data deve essere successiva al 01/01/2004!"  ForeColor="Red" >

Regular Expression validation control

Quando è necessario convalidare dei tipi di testo particolarmente complessi (che contengono dei simboli speciali) è possibile utilizzare il controllo "Regular Expression"; attraverso la proprietà ValidationExpression è possibile impostare l'espressione regolare da convalidare.

 



Indirizzo Email:


ControlToValidate="txtTesto"  ValidationExoression="^[w-.]+@([w-]+.)+[w-]{2,3}$"  Operator="GreaterThan"  ErrorMessage="(*) Errore ... indirizzo Email non valido!"  ForeColor="Red">

Cerchiamo di capire meglio come interpretare le Regular Expression analizzando la simbologia utilizzata. Prendiamo come esempio l'espressione corretta relativa ad un indirizzo Email:

"^[w-.]+@([w-]+.)+[w-]{2,3}$"

Nella rappresentazione di un'espressione, alcuni simboli speciali sono preceduti dal carattere "" , questo evita di generare ambiguità.

... ma vediamo nel dettaglio la simbologia:

-le epressioni iniziano sempre con il simbolo "^" e terminano con il simbolo "$"
-il simbolo "[ ]" indica un range di valori (da ... a ...)
-"w" indica che sono consentiti valori alfanumerici (compreso il carattere "_") ed anche i caratteri "-" e "." , dato che il carattere "." è un carattere speciale viene indicato utilizzando la notazione "."; "[w-.]" indica quindi l'insieme dei caratteri (tutti gli alfanumerici, "_" , "-" , ".")
-" + " questo simbolo indica che la stringa precedente può comparire un numero infinito di volte; infatti sono consenti indirizzi Email del tipo prova.prova1@prova.it
-"@" indica che il carattere "@" deve sempre essere presente
-"([w-]+.)+ " le parentesi "()" consentono di raggruppare le espressioni; "[w-]+." indica che è consentito qualunque carattere alfanumerico (compreso il carattere "_") e che deve terminare con il ".". Le espressioni prima del " + ": "[w-]" e "([w-]+.)" possono camparire infinite volte; infatti sono consenti indirizzi Email del tipo prova@prova1.prova2.it
-"[w]{2,3}" consente di rappresentare gli ultimi 2 o 3 caratteri di un indirizzo Email, "{}" viene utilizzato per specificare il numero esatto di caratteri da utilizzare

L'espressione per la rappresentazione corretta di un numero telefonico è la seguente:

"^d{4}-d$"

-anche in questo caso l'epressione inizia con il simbolo "^" e termina con il simbolo "$"
-"d{4}" il simbolo "d" indica che è consentito qualunque numero, "{4}" 4 è il numero massimo di caratteri per il prefisso
-"d": per il resto del numero è consentito qualunque tipo di carattere numerico (senza limiti di lunghezza)

Per maggiori dettagli sull'utilizzo delle espressioni nei controlli Regular Expression cliccare qui.

Custom validation control

Quando il tipo di convalida da effettuare è troppo complessa ed i controlli precostituiti non riescono a soddisfarre le necessità richieste è possibile creare un controllo personalizzato "Custom Validator". Il controllo utilizza sempre una validazione lato Server, ma è possibile anche utilizzare una validazione lato Client (per i browser che supportano DHTML); la gestione lato Client consente di controllare il valore del campo prima che le informazioni vengano inviate al Server, evitando quindi di aumentare il lavoro del Server.

Esempio di CustomValidator:

ControlToValidate="ID del campo da controllare"   ClientValidationFunction="FunzioneClient"   onServerValidate="FunzioneServer"   ErrorMessage="(*) Errore ... Messaggio di errore!"   Text="(*) Errore ... Messaggio di errore!"   ForeColor="Colore"   runat="server" />

Il controllo utilizza due proprietà, ClientValidationFunction e OnServerValidate, che contengono il nome delle funzioni utilizzate per convalidare il valore. La funzione ClientValidationFunction, solitamente è scritta in JavaScript, mentre la funzione OnServerValidate è scritta con i linguaggi gestibili dal Framework .NET (VB.NET, C#, J# ...)

La funzione lato Server riceve in ingresso un riferimento al comando di convalida e l'oggetto ServerValidateEventArgs che consente di recuperare il valore del campo utilizzando la proprietà Value, il risultato del controllo viene salvato nella proprietà IsValid (sempre dell'oggetto ServerValidateEventArgs).

Sub ServerValidate(objSource As Object, objArgs As ServerValidaEventArgs)' Viene effettuato un controllo che restituisce un blnValid (True/False)   Dim blnValid As Boolean = True   Try Dim intNumber As Integer = objArgs.Value     .... ' codice di controlloblnValid = True....   Catch objError As ExceptionblnValid = False   FinallyobjArgs.IsValid = blnValid   End TryEnd Sub

La funzione lato Client riceve in ingresso un riferimento a se stessa objSource ed un oggetto contenente gli argomenti per la chiamata di funzione objArgs.

E' importante ricordare che, prima di creare una funzione di validazione lato Client, è necessario aver creato la corrispondente funzione lato Server (descritta precedentemente), questo consnete di evitare che delle procedure esterne possano accedere a risorse protette.

E' possibile utilizzare un Validation Control senza impostare la propietà ControlToValidate, questa soluzione viene adottata quando è necessario validare controlli multipli o controlli ai quali non è possibile applicare nessun Validation Control (come ad esempio i CheckBox); in questo caso la proprietà Value delle funzioni lato Server e lato Client conterrà una stringa vuota (""). Nel caso appena illustrato, se non viene utilizzato il Validation Control per un campo CheckBox, è possibile utilizzare una funzione del tipo (lato Server):

void ServerValidation (object source, ServerValidateEventArgs args){args.IsValid = (CheckBox1.Checked == true);}

Validation Summary

Il Validation Summary consente di visualizzare tutti i campi non validi, elencando tutti gli ErrorMessage dei controlli che hanno generato errore. Le proprietà utilizzate sono:
 

-DisplayModeModalità di visualizzazione del Validation Summary (List, BulletList, SingleParagraph)
-Header TextIntestazione del Validation Summary
-ShowSummaryAttivazione del Validation Summary
-ShowMessageBoxSe impostata a true, consente di visualizzare gli errori del Validation Summary in una finestra di Windows
-ForeColorColore dei messaggi visualizzati


E' possibile visualizzare l'elenco degli errori in due modi:

in una determinata posizione della pagina, utilizzando ShowSummary="True" :
 


Inserire il Nome:

ControlToValidate="txtNome"  ErrorMessage="(*) Errore... Il campo NOME è un campo obbligatorio!"  ForeColor="Red">  HeaderText=" Si sono verificati i seguenti errori ... "  ShowSummary="True"  DisplayMode="List"  ForeColor="Red">

oppure in una finestra di Windows, utilizzando ShowMessageBox="True" :
 


Inserire il Nome:

ControlToValidate="txtNome"  ErrorMessage="(*) Errore... Il campo NOME è un campo obbligatorio!"  ForeColor="Red">  HeaderText=" Si sono verificati i seguenti errori ... "  ShowSummary="false"  ShowMessageBox="True"  DisplayMode="List"  ForeColor="Red">