Angella Andrea - Italian Blog

Infinita passione per lo sviluppo software !
posts - 133, comments - 216, trackbacks - 9

My Links

News

MIT OpenCourseWare: I'm invested Wikipedia Affiliate Button


Sto leggendo:

Archives

Post Categories

Siti web realizzati

Siti web tecnici

I controlli server di convalida di ASP.NET 2.0

I controlli server di convalida di ASP.NET 2.0 permettono di effettuare in modo estremamente semplice la validazione lato client e lato server dei campi di un form.
Come impostazione predefinita viene effettuato anche il controllo lato client ma è sufficiente impostare la proprietà EnableClientScript a False per disabilitarlo.
La validazione lato client deve essere disabilitata se si desiderano utilizzare i controlli server di convalida all'interno di un controllo UpdatePanel fornito dalle ASP.NET AJAX Extesions.

I controlli server di convalida sono (escludendo il controllo ValidationSummary):
Nome del controllo Descrizione
RequiredFiledValidator Garantisce che l'utente abbia impostato il campo
CompareValidator Confronta l'input dell'utente con un'altro valore
RangeValidator Controlla che l'input dell'utente sia compreso in un certo intervallo
RegularExpressionValidator Controlla che l'input dell'utente soddisfa un pattern definito da una espressione regolare
CustomValidator Controlla che l'input dell'utente soddisfa una logica personalizzata

Di seguito mostro alcuni esempi di utilizzo abbastanza intuitivi per mostrare alcune delle proprietà meno note.

Garantire che una casella di testo non venga lasciata vuota:


<asp:TextBox ID="controllo" runat="server"></asp:TextBox>   

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
                            Text="Messaggio di errore visualizzato"
                            ErrorMessage="Messaggio di errore che sarà visualizzato in un ValidationSummary"
                            ControlToValidate="controllo"
                            SetFocusOnError="True" />


Garantire che una casella di testo non venga lasciata vuota e venga modificato il valore iniziale:

Per fare questo è necessario utilizzare due RequiredFieldValidator.
Una proprietà importante è InitialValue che permette di impostare il testo iniziale dell'elemento che l'utente deve modificare prima di effettuare il submit del form.


<asp:TextBox ID="controllo" runat="server">Inserisci nome</asp:TextBox>   

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
                            ErrorMessage="Devi cambiare il valore al campo."
                            ControlToValidate="controllo"
                            Display="Dynamic"
                            InitialValue="Inserisci nome"/>

<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server"
                            ErrorMessage="Non lasciare vuoto il campo."
                            Display="Dynamic"
                            ControlToValidate="controllo"/> 

 

Garantire la scelta di una voce da una DropDownList: 


<asp:DropDownList ID="Colori" runat="server">
    <asp:ListItem Selected="True">Seleziona un colore</asp:ListItem>
    <asp:ListItem>Rosso</asp:ListItem>
    <asp:ListItem>Verde</asp:ListItem>
    <asp:ListItem>Blu</asp:ListItem>
</asp:DropDownList>

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
                            ErrorMessage="Devi selezionare un colore"
                            ControlToValidate="Colori"
                            Display="Dynamic"
                            InitialValue="Seleziona un colore"/>

 

Garantire che venga inserita una data in una casella di testo: 

<asp:TextBox ID="data" runat="server"></asp:TextBox>

<asp:CompareValidator ID="CompareValidator1" runat="server"
                      ErrorMessage="Non hai inserito una data."
                      ControlToValidate="data"
                      Type="Date"
                      Operator="DataTypeCheck"/>
 

 

Garantire che venga inserito un numero tra 0 e 10: 


<asp:TextBox ID="voto" runat="server"></asp:TextBox>

<asp:RangeValidator ID="RangeValidator1" runat="server"
                    ErrorMessage="Devi inserire un voto tra 0 e 10"
                    ControlToValidate="voto"
                    Type="Integer"
                    MinimumValue="0"
                    MaximumValue="10" />
 

 

Controllare che venga inserito un indirizzo di posta elettronica:


 

<asp:TextBox ID="mail" runat="server"></asp:TextBox>

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
                                ErrorMessage="Inserire un indirizzo di posta elettronica valido."
                                ControlToValidate="mail"                                       
                                ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" />
 

 

Effettuare una convalida personalizzata sia sul client che sul server (valore numerico potenza di 10):

Per prima cosa è opportuno definire una funzione javascript che effettuerà la validazione:


<script language="javascript" type="text/javascript">

    // Controllo che il testo inserito sia un numero multiplo di 10
    function controlloClient(source, args)
    {
        var testo = args.Value// Leggo il valore del controllo
        if ( testo % 10 == 0 )
        {
            args.IsValid = true; // La validazione è andata a buon fine
            return;
        }
        args.IsValid = false; // Il controllo non ha superato la validazione
    }

</script>

 

Dopodichè si inserisce un controllo CustomValidator impostando la proprietà ClientValidationFunction con il nome della funzione javascript.


<asp:TextBox ID="potenzaDiDieci" runat="server"></asp:TextBox>

<asp:CustomValidator ID="CustomValidator1" runat="server"
                     ErrorMessage="Devi inserire una potenza di 10."
                     ControlToValidate="potenzaDiDieci"
                     ClientValidationFunction="controlloClient"
                     onservervalidate="CustomValidator1_ServerValidate" />



Per effettuare la convalida lato server invece è opportuno gestire l'evento onservervalidate e procedere in modo analogo a quanto effettuato sul client.


// Gestore che effettua la validazione lato server del numero
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
    string testo = args.Value// Leggo il valore del controllo da validare
    int numero;

    Int32.TryParse(testo, out numero);

    if ( Int32.TryParse(testo, out numero) )
    {
        if (numero % 10 == 0)
        {
            args.IsValid = true;
        }
        else
        {
            args.IsValid = false;
        }
    }
    else
    {
        args.IsValid = false;
    }
}




E' da sottolineare ad esempio che all'interno del pulsante che ha provotato il PostBack è possibile utilizzare la proprietà IsValid dell'oggetto Page per controllare se il form ha superato la procedura di validazione.


protected void Button1_Click(object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        // TODO: Elaborazione del form...
    }
}

Note aggiuntive: 

  • All'interno di ErrorMessage è possibile inserire del testo HTML, quindi è possibile anche inserire delle immagini che segnalino visivamente l'errore.
  • Se si desiderano utilizzare più form all'interno di una pagina in ASP.NET 2.0 è possibile utilizzare la proprietà ValidationGroup per raggruppare i controlli di convalida in gruppi separati tra di loro.
  • Nel caso sia impostato SetFocusOnError a true e si verificano più errori, il focus sarà dato al controllo del form più in alto nella pagina.

 

Print | posted on venerdì 17 agosto 2007 20:34 | Filed Under [ .NET Framework 2.0 ASP.NET ]

Feedback

Gravatar

# re: I controlli server di convalida di ASP.NET 2.0

Ciao Andrea,
i ValidatorControls in ClientMode li puoi usare anche dentro un UpdatePanel. Tutto spiegato qui:
http://blogs.msdn.com/mattgi/archive/2007/01/23/asp-net-ajax-validators.aspx
Ciao
20/08/2007 00:30 | Federico Girardi
Gravatar

# re: I controlli server di convalida di ASP.NET 2.0

Ciao, una sola domanda , quale e' la via piu veloce di un controllo lato client su un campo di tipo data (gg/mm/aaaa)
grazie Gianni
30/05/2008 11:39 | Gianni dimitri
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET