Condividi tramite


Controllo CustomValidator (riferimento generale)

[Questa documentazione ha solo scopo di anteprima ed è soggetta a modifiche nelle versioni successive. Gli argomenti vuoti sono inclusi come segnaposto.]

Valuta il valore di un controllo di input per determinare se è in grado di superare la logica di convalida personalizzata.

<asp:CustomValidator
    AccessKey="string"
    BackColor="color name|#dddddd"
    BorderColor="color name|#dddddd"
    BorderStyle="NotSet|None|Dotted|Dashed|Solid|Double|Groove|Ridge|
        Inset|Outset"
    BorderWidth="size"
    ClientValidationFunction="string"
    ControlToValidate="string"
    CssClass="string"
    Display="None|Static|Dynamic"
    EnableClientScript="True|False"
    Enabled="True|False"
    EnableTheming="True|False"
    EnableViewState="True|False"
    ErrorMessage="string"
    Font-Bold="True|False"
    Font-Italic="True|False"
    Font-Names="string"
    Font-Overline="True|False"
    Font-Size="string|Smaller|Larger|XX-Small|X-Small|Small|Medium|
        Large|X-Large|XX-Large"
    Font-Strikeout="True|False"
    Font-Underline="True|False"
    ForeColor="color name|#dddddd"
    Height="size"
    ID="string"
    OnDataBinding="DataBinding event handler"
    OnDisposed="Disposed event handler"
    OnInit="Init event handler"
    OnLoad="Load event handler"
    OnPreRender="PreRender event handler"
    OnServerValidate="ServerValidate event handler"
    OnUnload="Unload event handler"
    runat="server"
    SetFocusOnError="True|False"
    SkinID="string"
    Style="string"
    TabIndex="integer"
    Text="string"
    ToolTip="string"
    ValidateEmptyText="True|False"
    ValidationGroup="string"
    Visible="True|False"
    Width="size"
/>

Note

Il controllo CustomValidator consente di creare un controllo di convalida con una logica di convalida personalizzata. È possibile ad esempio creare un controllo di convalida che consente di verificare se il valore immesso in una casella di testo è un numero pari.

I controlli di convalida eseguono sempre la convalida sul server. Tali controlli dispongono inoltre dell'implementazione completa sul client che consente l'esecuzione della convalida sul lato client da parte dei browser che supportano DHTML, ad esempio Internet Explorer versione 4.0 e successive. 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 dell'invio del form, evitando la sequenza di andata e ritorno delle informazioni necessaria 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 la funzione script di convalida sul lato client alla pagina ASPX.

Se si utilizza Visual Basic, la funzione deve avere il seguente formato:

Sub ValidationFunctionName (source, arguments)

Se si utilizza JScript, la funzione deve avere il seguente formato:

Function ValidationFunctionName (source, arguments)

Utilizzare la proprietà ClientValidationFunction per specificare il nome della funzione script di convalida sul lato client associata al controllo CustomValidator. Poiché la funzione script viene eseguita sul lato client, deve essere in un linguaggio supportato dal browser di destinazione, quale Visual Basic o JScript.

Come nel caso della convalida sul lato server, l'utilizzo della proprietà Value del parametro arguments consente di accedere al valore da convalidare. Restituire il risultato della convalida impostando la proprietà IsValid del parametro arguments.

Nota sulla sicurezzaNota sulla sicurezza

Durante la creazione di una funzione di convalida sul lato client, assicurarsi di includere la funzione di convalida sul lato server.Se si crea una funzione di convalida sul lato client senza una funzione di convalida sul lato server corrispondente, è possibile che la convalida possa essere aggirata da malware.

Più controlli di convalida possono essere associati a un singolo 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 viene chiamata alcuna funzione di convalida e la convalida ha esito positivo.Utilizzare un controllo RequiredFieldValidator per impedire all'utente di ignorare un 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 (""). Se necessario, tuttavia, queste funzioni di convalida vengono comunque chiamate 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, ad esempio, un controllo CheckBox sul server, evitare di impostare la proprietà ControlToValidate del controllo di convalida e utilizzare il codice che segue per il gestore dell'evento ServerValidate.

Sub ServerValidation (source As object, args As ServerValidateEventArgs)
 
   args.IsValid = (CheckBox1.Checked = True)

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

Per ulteriori informazioni sul controllo CustomValidator, vedere la classe System.Web.UI.WebControls.CustomValidator.

Esempi

Nell'esempio di codice riportato di seguito viene illustrato come creare un controllo CustomValidator che consente di convalidare se un valore immesso in una casella di testo sul server è un numero pari. Il risultato della convalida è quindi visualizzato sulla pagina.

Nota sulla sicurezzaNota sulla sicurezza

L'esempio di codice include una casella di testo che accetta l'input dell'utente e rappresenta quindi una potenziale minaccia alla sicurezza.Per impostazione predefinita, le pagine Web ASP.NET verificano che l'input dell'utente non includa script o elementi HTML.Per ulteriori informazioni, vedere Script Exploits Overview.

<%@ Page Language="VB" AutoEventWireup="True" %>
<html>
<head>
   <script runat="server">
      Sub ValidateBtn_OnClick(sender As object, e As EventArgs) 
         If Page.IsValid Then 
            lblOutput.Text = "Page is valid."
         Else 
            lblOutput.Text = "Page is not valid!"
         End If
      End Sub
      Sub ServerValidation (source As object, arguments As ServerValidateEventArgs)

         Dim num As Integer = Integer.Parse(arguments.Value)
         arguments.IsValid = ((num mod 2) = 0)
         
      End Sub
   </script>    
</head>
<body>
   <form runat="server">
      <h3>CustomValidator Example</h3>
      <asp:Label id=lblOutput runat="server" 
           Text="Enter an even number:" 
           Font-Name="Verdana" 
           Font-Size="10pt" /><br>
      <p />
      <asp:TextBox id="Text1" 
           runat="server" />
      &nbsp;&nbsp;
      <asp:CustomValidator id="CustomValidator1"
           ControlToValidate="Text1"
           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>
<%@ Page Language="C#" AutoEventWireup="True" %>
<html>
<head>
   <script runat="server">
      void ValidateBtn_OnClick(object sender, EventArgs e) 
      { 
         if (Page.IsValid) 
         {
            lblOutput.Text = "Page is valid.";
         }
         else 
         {
            lblOutput.Text = "Page is not valid!";
         }
      }
      void ServerValidation (object source, ServerValidateEventArgs arguments)
      {

         int i = int.Parse(arguments.Value);
         arguments.IsValid = ((i%2) == 0);

      }
   </script>    
</head>
<body>
   <form runat="server">
      <h3>CustomValidator Example</h3>
      <asp:Label id=lblOutput runat="server" 
           Text="Enter an even number:" 
           Font-Name="Verdana" 
           Font-Size="10pt" /><br>
      <p />
      <asp:TextBox id="Text1" 
           runat="server" />
      &nbsp;&nbsp;
      <asp:CustomValidator id="CustomValidator1"
           ControlToValidate="Text1"
           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>

Nell'esempio di codice riportato di seguito viene illustrato come creare un controllo CustomValidator che esegue la stessa routine di convalida dell'esempio precedente, ma sul client.

<%@ Page Language="VB" AutoEventWireup="True" %>
<html>
<head>
   <script runat="server">
      Sub ValidateBtn_OnClick(sender As object, e As EventArgs) 
         If Page.IsValid Then 
            lblOutput.Text = "Page is valid."
         Else 
            lblOutput.Text = "Page is not valid!"
         End If
      End Sub
      Sub ServerValidation (source As object, arguments As ServerValidateEventArgs)

         Dim num As Integer = Integer.Parse(arguments.Value)
         arguments.IsValid = ((num mod 2) = 0)
 
      End Sub
   </script>    
</head>
<body>
   <form runat="server">
      <h3>CustomValidator Example</h3>
      <asp:Label id=lblOutput runat="server" 
           Text="Enter an even number:" 
           Font-Name="Verdana" 
           Font-Size="10pt" /><br>
      <p />
      <asp:TextBox id="Text1" 
           runat="server" />
      &nbsp;&nbsp;
      <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="javascript">
   <!--
   function ClientValidate(source, arguments)
   {
      if ((arguments.Value % 2) == 0)
         arguments.IsValid=true;
      else
         arguments.IsValid=false;
   }
   // -->
</script>
<%@ Page Language="C#" AutoEventWireup="True" %>
<html>
<head>
   <script runat="server">
      void ValidateBtn_OnClick(object sender, EventArgs e) 
      { 
         if (Page.IsValid) 
         {
            lblOutput.Text = "Page is valid.";
         }
         else 
         {
            lblOutput.Text = "Page is not valid!";
         }
      }
      void ServerValidation (object source, ServerValidateEventArgs arguments)
      {
         
            int i = int.Parse(arguments.Value);
            arguments.IsValid = ((i%2) == 0);

      }
   </script>    
</head>
<body>
   <form runat="server">
      <h3>CustomValidator Example</h3>
      <asp:Label id=lblOutput runat="server" 
           Text="Enter an even number:" 
           Font-Name="Verdana" 
           Font-Size="10pt" /><br>
      <p />
      <asp:TextBox id="Text1" 
           runat="server" />
      &nbsp;&nbsp;
      <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="javascript">
   <!--
   function ClientValidate(source, arguments)
   {
      if ((arguments.Value % 2) == 0)
         arguments.IsValid=true;
      else
         arguments.IsValid=false;
   }
   // -->
</script>

Vedere anche

Riferimenti

CustomValidator

Altre risorse

Sintassi per il controllo server di convalida