Utilizzare i Validation Controls

Quando viene realizzato un Web Forms, per lo sviluppatorerisulta estremamente semplice ed immediato capire qualivalori possono essere inseriti in ogni singolo campo ma,spesse volte, il comportamento degli "utilizzatorifinali" è differente; si rivela quindi moltoimportante prevedere tutti i possibili errori che possonoessere generati durante la compilazione dei campi; ASP.NETaiuta a gestire questi eventi attraverso i ValidationControls.

Come usare i Validation Controls nei Web Forms

Grazie ai Validation Controls è possibile controllarele informazioni inserite nei vari campi dei Web Forms evisualizzare eventuali messaggi di errore e, soprattutto, noninviare la pagina se tutti campi non soddisfano allecondizioni impostate nei Validation Controls.

I Validation Controls possono essere eseguiti sia inmodalità Server side che in modalità ClientSide; se il browser utilizzato supporta DHTML, verrannoautomaticamente gestiti in modalità Client side (alfine di ridurre il carico di lavoro del Server).

I validator attualmente attivi sono i seguenti:

-

<ASP:RequiredFieldValidator>

Controlla se il campo contiene un valore
-

<ASP:RangeValidator>

Controlla se il campo contiene un intervallo numerico
-

<ASP:CompareValidator>

Controlla se il valore contenuto nel campo corrispondead un valore
-

<ASP:RegularExpressionValidator>

Controlla se il valore del campo corrisponde ad unaspecifica espressione
- <ASP:CustomValidator> Viene eseguita una convalida definita dall'utente
- <ASP:ValidationSummary> Visualizza un elenco di tutti gli errori di convalida

Per verificare la validità dei valori inseriti neicampi presenti nel Form, basterà semplicementeinserire uno o più Validation Control(<asp:TipoControlValidator ...></asp:TipoFieldValidator>) per ogni Campo che sidesidera controllare.

Per gestire un Validation Control sono disponibili leseguenti proprietà principali:

-

ControlToValidate Nome del controllo (campo) da validare
- Text Imposta il messaggio di errore da visualizzare. Ilmessaggio di errore verrà visualizzato nel puntoesatto in cui si trova il comando di convalida.

-

ErrorMessage Imposta il messaggio di errore visualizzato nelcontrollo ValidationSummary.

-

Display Se il controllo è stato inserito in una tabella,impostando la proprietà astatic, è possibile evitare chela lunghezza della colonna subisca delle modifiche inseguito alla visualizzazione del comando di convalida;al contrario se viene impostato adymamic la colonna potrà subiredelle modifiche in seguito alla visualizzazione delmessaggio di errrore.

ed altre proprietà specifiche o appartenenti adeterminati Validation Controls:

-

ControlToCompare Campo di confronto per il Compare Validator

-

ValuelToCompare Valore di confronto per il Compare Validator

-

ValidationExpression Indica l'espressione del testo da convalidare

-

ClientValidationFunction Proprietà del controllo Custom Validator

-

OnServerValidate Proprietà del controllo Custom Validator

-

DisplayMode Modalità di visualizzazione del ValidationSummary

-

Header Text Intestazione del Validation Summary

-

ShowSummary Attivazione del Validation Summary

-

ShowMessageBox Consente di visualizzare gli errori del ValidationSummary in una finestra di Windows

-

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

-

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

-

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

-

Enabled Consente di attivare/disattivare il controllo su uncampo

-

IsValid Restituisce un valore (true/false) che indica se ilcampo ha passato il test di convalida

-

Validate Effettua la convalida su un campo ed aggiorna laproprità IsValid

La differenza tra la proprietà Text ela proprietà ErrorMessage èche Text viene utilizzata per visualizzare il messaggio dierrore accanto al controllo, ErrorMessage viene inveceutilizzata per visualizzare il messaggio di errore nelValidation Summary (elenco degli errori di validazione delForm); nel caso in cui non sia stata impostata laproprietà Text, verrà visualizzato il messaggiopresente in ErrorMessage.

Required Field Validation Control

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

 

    <script language="C#" runat="server">void HiBtn_Click(Object Src, EventArgs E){  lblCiao.Text = "Ciao " + txtNome.Text + " , benvenuto nel mondo .NET!";}</script><html><head><title>Esempio sui Validation Controls</title></head><body><form runat="server">Inserire il Nome: <asp:textbox id="txtNome" runat="server"/><asp:button text="Invia" Onclick="HiBtn_Click" runat=server/><asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server"  ControlToValidate="txtNome"  ErrorMessage="(*) Errore... Il campo NOME è un campo obbligatorio!"  ForeColor="Red"></asp:RequiredFieldValidator><br/><br/><b><asp:Label id="lblCiao" runat="server" /></b><br/></form></body></html>

 


Come è facile intuire, il controllo "RequiredField Validator" viene spesso associato ad altriValidation Controls, in questo modo è possibilecontrollare sia il fatto che il campo non può esserevuoto (Required Field Validator) sia altre condizioni.

Range validation control

Il Range Validator consente diverificare che il valore inserito sia compreso fra due valorispecificati (quindi del tipo da ... a ...); per ottenerequesto risultato basterà utilizzare leproprietà MaximunValue eMinimunValue, in aggiunta allaproprietà Type che consente dispecificare il tipo (dataype) del valore da gestire.

    <script language="C#" runat="server">void Btn_Click(Object Src, EventArgs E){  lblConfronto.Text = "Il numero inserito è compreso tra 1 e 10!";}</script><html><head><title>Esempio sui Validation Controls</title></head><body><form runat="server">Inserire un numero tra 1 e 10: <asp:textbox id="txtNumero" runat="server"/><br/><asp:RangeValidator id="RangeFieldValidator1" runat="server"  ControlToValidate="txtNumero"  MinimumValue="1"  MaximumValue="10"  Type="Integer"  ErrorMessage="(*) Errore... Il numero deve essere compreso tra 1 e 10!"  ForeColor="Red" ></asp:RangeValidator ><br/><br/><asp:button text="Enter" Onclick="Btn_Click" runat=server/><br/><br/><b><asp:Label id="lblConfronto" runat="server" /></b><br /></form></body></html>

Compare validation control

Questo controllo presenta diversiambiti 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, GreaterThanecc...)
- l'uguaglianza di un camporispetto ad un valore fisso, utilizzando gli operatori(Equal, NotEqual, GreaterThan ecc...)


Controllo sul tipo (datatype) di uncampo:

 

    <script language="C#" runat="server">void Btn_Click(Object Src, EventArgs E){  lblCiao.Text = "Hai " + txtAnni.Text + " anni !";}</script><html><head><title>Esempio sui Validation Controls</title></head><body><form runat="server">Inserire l'età: <asp:textbox id="txtAnni" runat="server"/><asp:CompareValidator id="CompareFieldValidator1" runat="server"  ControlToValidate="txtAnni"  Type="Integer"  Operator="DataTypeCheck"  ErrorMessage="(*) Errore... Inserire un numero!"  ForeColor="Red" ></asp:CompareValidator ><br/><br/><asp:button text="Enter" Onclick="Btn_Click" runat=server/><br/><br/><b><asp:Label id="lblCiao" runat="server" /></b><br /></form></body></html>

 


Confronto tra due campi:

    <script language="C#" runat="server">void Btn_Click(Object Src, EventArgs E){  lblConfronto.Text = "Confronto eseguito con successo!";}</script><html><head><title>Esempio sui Validation Controls</title></head><body><form runat="server">Inserire l'indirizzo Email: <asp:textbox id="txtEmail" runat="server"/><br/>Re-inserire l'indirizzo Email: <asp:textbox id="txtEmail1" runat="server"/><asp:CompareValidator id="CompareFieldValidator1" runat="server"  ControlToValidate="txtEmail1"  ControlToCompare="txtEmail"  Type="String"  Operator="Equal"  ErrorMessage="(*) Errore... Controllare l'indirizzo Email inserito!"  ForeColor="Red" ></asp:CompareValidator ><br/><br/><asp:button text="Enter" Onclick="Btn_Click" runat=server/><br/><br/><b><asp:Label id="lblConfronto" runat="server" /></b><br /></form></body></html>

Confronto fra un campo ed un valorefisso:

    <script language="C#" runat="server">void Btn_Click(Object Src, EventArgs E){  lblData.Text = "Hai inserito una data successiva al 01/01/2004!";}</script><html><head><title>Esempio sui Validation Controls</title></head><body><form runat="server">Inserire una Data: <asp:textbox id="txtData" runat="server"/><br/><asp:CompareValidator id="CompareFieldValidator1" runat="server"  ControlToValidate="txtData"  ValueToCompare="01/01/2004"  Operator="GreaterThan"  Type="Date"  ErrorMessage="(*) Errore... La data deve essere successiva al 01/01/2004!"  ForeColor="Red" ></asp:CompareValidator ><br/><br/><asp:button text="Enter" Onclick="Btn_Click" runat=server/><br/><br/><b><asp:Label id="lblData" runat="server" /></b><br /></form></body></html>

Regular Expression validationcontrol

Quando è necessario convalidare dei tipidi testo particolarmente complessi (che contengono deisimboli speciali) è possibile utilizzare il controllo"Regular Expression"; attraverso laproprietà ValidationExpression è possibileimpostare l'espressione regolare daconvalidare.

    <script language="C#" runat="server">void Btn_Click(Object Src, EventArgs E){  lblTesto.Text = "Espressione regolare!";}</script><html><head><title>Esempio sui Validation Controls</title></head><body><form runat="server">Indirizzo Email: <asp:textbox id="txtTesto" runat="server"/><br/><asp:RegularExpressionValidator id="RegularExpressionFieldValidator1" runat="server"  ControlToValidate="txtTesto"  ValidationExoression="^[w-.]+@([w-]+.)+[w-]{2,3}$"  Operator="GreaterThan"  ErrorMessage="(*) Errore ... indirizzo Email non valido!"  ForeColor="Red"></asp:RegularExpressionValidator ><br/><br/><asp:button text="Enter" Onclick="Btn_Click" runat=server/><br/><br/><b><asp:Label id="lblTesto" runat="server" /></b><br /></form></body></html>

Cerchiamo di capire meglio come interpretare leRegular Expression analizzando la simbologia utilizzata.Prendiamo come esempio l'espressione corretta relativa adun indirizzo Email:

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

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

... ma vediamo nel dettaglio lasimbologia:

- le epressioni iniziano sempre con ilsimbolo "^" e terminano con il simbolo"$"
- il simbolo "[ ]" indica unrange di valori (da ... a ...)
- "w" indica che sonoconsentiti valori alfanumerici (compreso il carattere"_") ed anche i caratteri "-" e"." , dato che il carattere "."è un carattere speciale viene indicatoutilizzando la notazione ".";"[w-.]" indica quindi l'insieme deicaratteri (tutti gli alfanumerici, "_" ,"-" , ".")
- " + " questo simbolo indicache la stringa precedente può comparire unnumero infinito di volte; infatti sono consentiindirizzi Email del tipoprova.prova1@prova.it
- "@" indica che il carattere"@" deve sempre esserepresente
- "([w-]+.)+ " le parentesi"()" consentono di raggruppare leespressioni; "[w-]+." indica che èconsentito qualunque carattere alfanumerico (compresoil carattere "_") e che deve terminare con il".". Le espressioni prima del " +": "[w-]" e "([w-]+.)" possonocamparire infinite volte; infatti sono consentiindirizzi Email del tipoprova@prova1.prova2.it
- "[w]{2,3}" consente dirappresentare gli ultimi 2 o 3 caratteri di unindirizzo Email, "{}" viene utilizzato perspecificare il numero esatto di caratteri dautilizzare

L'espressione per la rappresentazionecorretta di un numero telefonico è laseguente:

"^d{4}-d$"

- anche in questo caso l'epressioneinizia con il simbolo "^" e termina con ilsimbolo "$"
- "d{4}" il simbolo"d" indica che è consentito qualunquenumero, "{4}" 4 è il numero massimo dicaratteri per il prefisso
- "d": per il resto delnumero è consentito qualunque tipo di caratterenumerico (senza limiti dilunghezza)

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

Custom validation control

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

Esempio di CustomValidator:

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

Il controllo utilizza due proprietà,ClientValidationFunction eOnServerValidate, che contengono il nomedelle funzioni utilizzate per convalidare il valore. Lafunzione ClientValidationFunction,solitamente è scritta in JavaScript, mentre lafunzione OnServerValidate è scrittacon i linguaggi gestibili dal Framework .NET (VB.NET, C#, J#...)

La funzione lato Server riceve in ingresso unriferimento al comando di convalida e l'oggetto ServerValidateEventArgs che consente direcuperare il valore del campo utilizzando laproprietà Value, il risultato del controllo vienesalvato 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 unriferimento a se stessa objSource ed un oggetto contenentegli argomenti per la chiamata di funzione objArgs.

E' importante ricordare che, prima di creare unafunzione di validazione lato Client, è necessario avercreato la corrispondente funzione lato Server (descrittaprecedentemente), questo consnete di evitare che delleprocedure esterne possano accedere a risorseprotette.

 

    <script language="javascript">funtion ClientValidate(objSource, objArgs)// Viene effettuato un controllo che restituisce un blnValid (True/False){  var blnValid = true;  var intNumber = objArgs.Value; {     ... // codice di controllo     blnValid = false;     break;  }elseblnValid = false;    }    else    blnValid = false;    objArgs.IsValid = blnValid;}</script>

 

E' possibile utilizzare un Validation Controlsenza impostare la propietà ControlToValidate, questasoluzione viene adottata quando è necessario validarecontrolli multipli o controlli ai quali non èpossibile applicare nessun Validation Control (come adesempio i CheckBox); in questo caso la proprietà Valuedelle funzioni lato Server e lato Client conterrà unastringa vuota (""). Nel caso appena illustrato, senon viene utilizzato il Validation Control per un campoCheckBox, è 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 visualizzaretutti i campi non validi, elencando tutti gli ErrorMessagedei controlli che hanno generato errore. Le proprietàutilizzate sono:

- DisplayMode Modalità di visualizzazionedel Validation Summary (List, BulletList,SingleParagraph)
- HeaderText Intestazione del ValidationSummary
- ShowSummary Attivazione del ValidationSummary
- ShowMessageBox Se impostata a true, consente divisualizzare gli errori del Validation Summary in unafinestra di Windows
- ForeColor Colore dei messaggivisualizzati


E' possibile visualizzare l'elenco degli errori indue modi:

in una determinataposizione della pagina, utilizzandoShowSummary="True" :

 

    <script language="C#" runat="server">void HiBtn_Click(Object Src, EventArgs E){  lblCiao.Text = "Ciao " + txtNome.Text + " , benvenuto nel mondo .NET!";}</script><html><head><title>Esempio sui Validation Controls</title></head><body><form runat="server">Inserire il Nome: <asp:textbox id="txtNome" runat="server"/><asp:button text="Invia" Onclick="HiBtn_Click" runat=server/><asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server"  ControlToValidate="txtNome"  ErrorMessage="(*) Errore... Il campo NOME è un campo obbligatorio!"  ForeColor="Red"></asp:RequiredFieldValidator><br/><br/><asp:ValidationSummary id="ValidationSummary1" runat="server"  HeaderText="<b> Si sono verificati i seguenti errori ... </b>"  ShowSummary="True"  DisplayMode="List"  ForeColor="Red"></asp:ValidationSummary><br/><br/><b><asp:Label id="lblCiao" runat="server" /></b><br/></form></body></html>

 


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

 

    <script language="C#" runat="server">void HiBtn_Click(Object Src, EventArgs E){  lblCiao.Text = "Ciao " + txtNome.Text + " , benvenuto nel mondo .NET!";}</script><html><head><title>Esempio sui Validation Controls</title></head><body><form runat="server">Inserire il Nome: <asp:textbox id="txtNome" runat="server"/><asp:button text="Invia" Onclick="HiBtn_Click" runat=server/><asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server"  ControlToValidate="txtNome"  ErrorMessage="(*) Errore... Il campo NOME è un campo obbligatorio!"  ForeColor="Red"></asp:RequiredFieldValidator><asp:ValidationSummary id="ValidationSummary1" runat="server"  HeaderText="<b> Si sono verificati i seguenti errori ... </b>"  ShowSummary="false"  ShowMessageBox="True"  DisplayMode="List"  ForeColor="Red"></asp:ValidationSummary><br/><br/><b><asp:Label id="lblCiao" runat="server" /></b><br/></form></body></html>