Classe CustomValidator
Assembly: System.Web (in system.web.dll)
Utilizzare il controllo CustomValidator per specificare una funzione di convalida definita dall'utente per un controllo di input. Il controllo CustomValidator e il controllo di input del quale viene eseguita la convalida sono controlli separati. In questo modo è possibile controllare la posizione di visualizzazione del messaggio di convalida.
I controlli di convalida eseguono sempre la convalida sul server. Inoltre presentano un'implementazione completa del lato client che consente ai browser abilitati agli script, ad esempio Microsoft Internet Explorer 4.0 e versioni successive, di eseguire la convalida sul client. La convalida sul lato client migliora il processo di convalida mediante la verifica dell'input dell'utente prima dell'invio al server. In tal modo è possibile rilevare gli errori sul client prima che il form venga inviato, evitando la sequenza di andata e ritorno delle informazioni necessarie per la convalida sul lato server.
Per creare una funzione di convalida sul lato server, specificare un gestore per l'evento ServerValidate che esegue la convalida. Per accedere alla stringa del controllo di input da convalidare, utilizzare la proprietà Value dell'oggetto ServerValidateEventArgs passato nel gestore eventi come parametro. Il risultato della convalida viene quindi memorizzato nella proprietà IsValid dell'oggetto ServerValidateEventArgs.
Per creare una funzione di convalida per il lato client, aggiungere innanzi tutto la funzione di convalida per il lato server descritta in precedenza. Aggiungere quindi alla pagina ASP.NET (file ASPX) la funzione di script di convalida per il lato client.
Se si utilizza Visual Basic Scripting Edition (VBScript), il formato della funzione deve essere il seguente:
Sub ValidationFunctionName(source, arguments)
Se si utilizza JScript, il formato della funzione deve essere il seguente:
function ValidationFunctionName(source, arguments)
Utilizzare la proprietà ClientValidationFunction per specificare il nome della funzione di script di convalida per il lato client associata al controllo CustomValidator. Poiché la funzione di script viene eseguita sul client, è necessario che sia scritta in un linguaggio supportato dal browser di destinazione, quale VBScript oppure JScript.
Analogamente a quanto avviene per la convalida sul lato server, per accedere alla stringa del controllo di input da convalidare utilizzare la proprietà Value del parametro arguments. Per restituire il risultato della convalida, impostare la proprietà IsValid del parametro arguments.
Attenzione |
|---|
| Quando si utilizzano i controlli di convalida, è opportuno verificare i risultati di convalida sul lato server prima di eseguire qualsiasi elaborazione. Successivamente all'esecuzione di un postback, ma prima della chiamata ai metodi dell'evento utilizzati, nella pagina vengono richiamati i controlli di convalida e i relativi risultati vengono aggregati nella proprietà Page.IsValid. È inoltre possibile chiamare i controlli di convalida in modo esplicito tramite il metodo Validate. È opportuno verificare, a livello di codice, che la proprietà Page.IsValid restituisca true prima di elaborare l'input. Sebbene i browser abilitati agli script siano in grado di impedire il verificarsi di un postback sul client in caso di esito negativo in una verifica di convalida, è sempre opportuno verificare la proprietà Page.IsValid nel codice del server prima di elaborare i dati convalidati. |
È possibile utilizzare più controlli di convalida con un solo controllo di input per convalidare criteri diversi. È possibile ad esempio applicare più controlli di convalida a un controllo TextBox che consente agli utenti di specificare il numero di oggetti da aggiungere a un carrello degli acquisti. È possibile utilizzare un controllo CustomValidator per essere sicuri che il valore specificato sia inferiore alla quantità di articoli in magazzino e un controllo RequiredFieldValidator per essere sicuri che gli utenti immettano un valore nel controllo TextBox.
Nota |
|---|
| Se il controllo di input è vuoto, non verrà chiamata alcuna funzione di convalida e la convalida verrà eseguita correttamente. Utilizzare un controllo RequiredFieldValidator per richiedere all'utente di immettere dati nel controllo di input. |
È possibile utilizzare un controllo CustomValidator senza impostare la proprietà ControlToValidate. Tale operazione viene eseguita in genere quando si esegue la valutazione di più controlli di input che non possono essere utilizzati con controlli di convalida, quale il controllo CheckBox. In questo caso, la proprietà Value del parametro arguments passato al gestore dell'evento ServerValidate e alla funzione di convalida sul lato client contiene sempre una stringa vuota (""). Tuttavia queste funzioni di convalida sono chiamate, se appropriate, per determinare la validità del server e del client. Per accedere al valore da convalidare, è necessario fare riferimento a livello di codice al controllo di input da convalidare e recuperare il valore dalla proprietà appropriata. Per convalidare un controllo CheckBox sul server, ad esempio, non impostare la proprietà ControlToValidate del controllo di convalida e utilizzare il codice seguente per il gestore dell'evento ServerValidate.
void ServerValidation (object source, ServerValidateEventArgs args) { args.IsValid = (CheckBox1.Checked == true); }
Per ulteriori informazioni sui controlli di convalida, vedere BaseValidator.
Accesso facilitato
Il codice sottoposto a rendering per impostazione predefinita per questo controllo potrebbe non essere conforme agli standard di accesso facilitato, come le linee guida WCAG (Web Content Accessibility Guidelines) 1.0 livello 1. Per informazioni dettagliate sul supporto dell'accesso facilitato per questo controllo, vedere Controlli ASP.NET e accesso facilitato.
Nell'esempio di codice riportato di seguito viene illustrato come creare un controllo CustomValidator sul lato server.
<%@ Page Language="C#" AutoEventWireup="True" %> <html> <head> <script runat="server"> void ValidateBtn_OnClick(object sender, EventArgs e) { // Display whether the page passed validation. if (Page.IsValid) { Message.Text = "Page is valid."; } else { Message.Text = "Page is not valid!"; } } void ServerValidation(object source, ServerValidateEventArgs args) { try { // Test whether the value entered into the text box is even. int i = int.Parse(args.Value); args.IsValid = ((i%2) == 0); } catch(Exception ex) { args.IsValid = false; } } </script> </head> <body> <form runat="server"> <h3>CustomValidator ServerValidate Example</h3> <asp:Label id="Message" Text="Enter an even number:" Font-Name="Verdana" Font-Size="10pt" runat="server"/> <p> <asp:TextBox id="Text1" runat="server" /> <asp:CustomValidator id="CustomValidator1" ControlToValidate="Text1" Display="Static" ErrorMessage="Not an even number!" ForeColor="green" Font-Name="verdana" Font-Size="10pt" OnServerValidate="ServerValidation" runat="server"/> <p> <asp:Button id="Button1" Text="Validate" OnClick="ValidateBtn_OnClick" runat="server"/> </form> </body> </html>
Nell'esempio di codice riportato di seguito viene illustrato come creare un controllo CustomValidator sul lato client.
<%@ Page Language="C#" AutoEventWireup="True" %> <html> <head> <script runat="server"> void ValidateBtn_OnClick(object sender, EventArgs e) { // Display whether the page passed validation. if (Page.IsValid) { Message.Text = "Page is valid."; } else { Message.Text = "Page is not valid!"; } } void ServerValidation(object source, ServerValidateEventArgs args) { try { // Test whether the value entered into the text box is even. int i = int.Parse(args.Value); args.IsValid = ((i%2) == 0); } catch(Exception ex) { args.IsValid = false; } } </script> </head> <body> <form runat="server"> <h3>CustomValidator ServerValidate Example</h3> <asp:Label id="Message" Text="Enter an even number:" Font-Name="Verdana" Font-Size="10pt" runat="server"/> <p> <asp:TextBox id="Text1" runat="server" /> <asp:CustomValidator id="CustomValidator1" ControlToValidate="Text1" ClientValidationFunction="ClientValidate" OnServerValidate="ServerValidation" Display="Static" ErrorMessage="Not an even number!" ForeColor="green" Font-Name="verdana" Font-Size="10pt" runat="server"/> <p> <asp:Button id="Button1" Text="Validate" OnClick="ValidateBtn_OnClick" runat="server"/> </form> </body> </html> <script language="vbscript"> <!-- Sub ClientValidate(source, arguments) If (arguments.Value mod 2) = 0 Then arguments.IsValid=true Else arguments.IsValid=false End If End Sub ' --> </script>
- AspNetHostingPermission per operare in un ambiente host. Valore richiesta: LinkDemand. Valore autorizzazione: Minimal.
- AspNetHostingPermission per operare in un ambiente host. Valore richiesta: InheritanceDemand. Valore autorizzazione: Minimal.
System.Web.UI.Control
System.Web.UI.WebControls.WebControl
System.Web.UI.WebControls.Label
System.Web.UI.WebControls.BaseValidator
System.Web.UI.WebControls.CustomValidator
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.
Attenzione