Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Validare i dati con ASP.NET

Usare i controlli di convalida per i form di inserimento dati
Usare i controlli di convalida per i form di inserimento dati
Link copiato negli appunti

Per validare e controllare il valore dei dati inseriti in un form, a volte, vengono usate complesse funzioni JavaScript su ogni campo. In questo articolo, prendiamo in esame i controlli di validazione messi a disposizione da ASP.NET.

La classe BaseValidator

Per prima cosa dobbiamo dire che grazie ai controlli di validazione forniti da ASP.NET è semplice ottenere delle Label destinate a visualizzare messaggi di errore e che tutti i controlli validator ereditano dalla classe BaseValidator che a sua volta eredita, nemmeno a farlo apposta dalla stessa classe Label.

A ciascun controllo di input o di selezione possono essere associati uno o più "validatori". Potremmo, ad esempio, aver bisogno di controllare in un particolare campo, la presenza di dati e la loro correttezza.

Ogni controllo validator espone una proprietà isValid di tipo booleano, che indica se i dati ineriti nel controllo associato sono o meno validi ovvero se rispettano o meno le regole che vi abbiamo imposto.

I controlli di validazione messi a disposizione da ASP.NET sono principalmente 6:

  • RequiredFieldValidator,
  • CompareValidator,
  • RangeValidator,
  • RegularExpressionValidator,
  • CustomValidator,
  • ValidationSummary.

Con questa collezione di controlli possiamo verificare i dati praticamente in tutte le casistiche. Dalla richiesta di un semplice inserimento di valori, alla verifica tramite espressioni regolari. Li esaminiamo uno ad uno.

RequiredFieldValidator

Questo controllo viene utilizzato per verificare che sia avvenuto l'inserimento nel controllo associato. Se quest'ultimo risulta vuoto apparirà il messaggio di errore.

Listato 1. Validazione di una TextBox

<!-- Controllo associato -->
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>

<!-- Validatore -->
<asp:RequiredFieldValidator id="Validatore" runat="server"
  ControlToValidate="TextBox1"
  ErrorMessage="Inserire un valore">
</asp:RequiredFieldValidator>

Abbiamo inserito una casella di testo generica ed un controllo di validazione. Nel controllo di validazione abbiamo definito il controllo da validare (ControlToValidate) ed il messaggio di errore (ErrorMessage). Nel caso in cui l'utente lasci vuota la casella di testo, apparirà il messagdio di errore e la pagina non effettuerà il POST dei dati.

CompareValidator

Questo validatore serve per la comparazione del valore immesso nel controllo da convalidare, con un termine di paragone. Il termine di paragone può essere un valore fisso oppure un valore preso da un ulteriore controllo. Inoltre è possibile decidere la regole di confronto tra i valori (uguale, maggiore, minore, etc.). Se il confronto ha esito negativo, sarà visualizzato un messaggio di errore.

Listato 2. Convalidare l'inserimento di una password

<asp:TextBox id="txtPassword" runat="server"></asp:TextBox>
<br />
<asp:TextBox id="txtVerificaPassword" runat="server"></asp:TextBox>

<asp:CompareValidator id="Confronta" runat="server"
  ControlToCompare="txtPassword"
  ControlToValidate="txtVerificaPassword"
  Operator="Equal"

  ErrorMessage="Le password devono essere uguali.">
</asp:CompareValidator>

In questo esempio abbiamo un form con un campo Password ed uno di verifica. Se l'utente inserisce nel campo di verifica una password diversa da quella del primo campo, riceverà l'errore. Nella proprietà ValueToCompare sia nel tag sia a codice, definiamo il termine di paragone.

Esiste inoltre un ultimo attributo chiamato Type che prende valori dall'enumerazione ValidationDataType. Con questo attributo sarà possibile definire il tipo di dato da associare ai valori per il confronto.

RangeValidator

Questo validatore verifica che il dato sia compreso in un intervallo di valori. Ad esempio possiamo verificare che l'anno immesso in una casella di testo sia compreso tra il 1990 e l'anno corrente.

Listato 3. Verifica sulla data

<asp:TextBox id="txtAnno" runat="server"></asp:TextBox>

<asp:CompareValidator id="Comparatore" runat="server"
  ControlToValidate="txtAnno"
  ErrorMessage="Inserire un anno dal 1990 al 2006"
  MaximumValue="2006" MinimumValue="1990"
  Type="Integer">
</asp:CompareValidator>

Come mostrato nel codice questo controllo necessita di un valore minimo (MaximumValue) e di un valore massimo (Minimum Value) da poter controllare. Inoltre dobbiamo, anche qui, specificare il tipo di dato che deve essere controllato (Type).

RegularExpressionValidator

Il controllo in questione effettua una verifica tramite espressioni regolari sul contenuto. Le espressioni regolari, in questo caso, definiscono i modelli (pattern) di stringa ai quali bisogna attenersi. Ad esempio un indirizzo E-Mail deve contenere una prima sottostringa poi un carattere chiocciola '@', una seconda sottostringa, un punto ed infine un massimo di 4 caratteri che identificano il dominio. In una espressione regolare possiamo creare il modello, il formato di questa stringa e farlo verificare dal nostro validatore.

Listato 4. Convalidare un indirizzo di posta

<asp:TextBox id="Email" runat="server"></asp:TextBox>

<asp:RegulaExpressionValidator id="RegEx" runat="server"
  ControlToValidate="Email"
  ErrorMessage="E-Mail non valida!"
  ValidationExpression="w+([-+.']w+)*@w+([-.]w+)*.w+([-.]w+)*" >
</asp:RegularExpressionValidator>

CustomValidator

Questo controllo di validazione è il più flessibile e deve essere utilizzato ogni qual volta non si possono usare gli altri validatori o le regole di validazione sono personalizzate. Dobbiamo ricordare che i controlli come TextBox ad esempio, detengono una proprietà ValidationProperty che gli consente di interagire con i validatori, cosa che invece una CheckBox non possiede.

Anche in questo caso andremo ad usare un validatore personalizzato. Inoltre con i controlli personalizzati di validazione possiamo anche specificare una funzione Javascript personalizzata. Vediamo un paio di esempi.

Listato 5. CustomValidator con funzione Javascript

<asp:CustomValidator id="CusVal" runat="server"
  ErrorMessage="Messaggio di errore"
  ControlToValidate="txtTesto" ValidateEmptyText="true"
  ClientValidationFunction="ControllaCodice" >
</asp:CustomValidator>

Listato 6. Funzione JavaScript

<script type="Text/Javascript">
function ControllaCodice(source, args){
  if (/*... condizione ... */){
    args.isValid = false;
  }else{
    args.isValid = true;
  }
}

L'unico fattore di cui dobbiamo tenere conto è la firma della funzione. In altre parole dobbiamo sempre inserire source ovvero il controllo da validare e args, gli argomenti che accetta il validatore, in questo caso stiamo dicendo se il controllo sia valido o meno. Con questo controllo abbiamo piena gestione della validazione di tutti i controlli, quali CheckBox, Liste, Combo e quant'altro.

Riassumere gli errori, ValidationSummary

L'ultimo controllo che dobbiamo analizzare è il ValidationSummary, ovvero quel controllo che riassume tutti i messaggi di errore dei controlli validator presenti nella pagina. Questo controllo offre due modalità di visualizzazione degli errori: possiamo elencare gli errori in una lista posta ai piedi del form, oppure possiamo far apparire una finestra di alert con elencati i messaggi di errore.

Listato 7. ValidationSummary

<asp:ValidationSummary id="Sum" runat="server"
  HeaderText="Titolo" ShowMessageBox="true" >
</asp:ValidationSummary>

Il controllo sommario ci chiede se vogliamo visualizzare una finestra di Alert (ShowMessageBox), Il valore ErrorMessage di un controllo validator viene visualizzato all' interno di un ValidationSummary, se presente, mentre il valore Text del controllo validator prende il posto di ErrorMessage se è presente un ValidationSummary.

Riassumendo, se vogliamo visualizzare un elenco di errori, basterà impostare la stringa di errore solamente per l'attributo ErrorMessage, al contrario se vogliamo visualizzare, in presenza di un ValidationSummary, anche un mesaggio di fianco ad ogni controllo, dovremo interagire con l'attributo Text dei singoli validatori.

Conclusioni

Grazie alla presenza di questi controlli, la validazione dei dati risulta veloce e flessibile, ma non dobbiamo chiudere JavaScript in un cassetto perchè come dimostrato nel CustomValidator, può sempre tornarci utile.

Ti consigliamo anche