Partager via


CustomValidator, contrôle (Référence générale)

Mise à jour : novembre 2007

Analyse la valeur d'un contrôle d'entrée pour déterminer si ce contrôle réussit la logique de validation personnalisée.

<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"
/>

Notes

Le contrôle CustomValidator permet de créer un contrôle de validation avec une logique de validation personnalisée. Par exemple, vous pouvez créer un contrôle de validation qui vérifie si la valeur entrée dans une zone de texte est un nombre pair.

Les contrôles de validation effectuent toujours la vérification sur le serveur. Ils possèdent également une implémentation côté client complète qui permet aux navigateurs DHTML pris en charge (comme Microsoft Internet Explorer version 4.0 ou version ultérieure) d'effectuer la validation sur le client. La validation côté client améliore le processus de validation en vérifiant l'entrée d'utilisateur avant qu'elle soit envoyée au serveur. Cela permet de détecter les erreurs éventuelles sur le client avant que le formulaire ne soit envoyé et d'éviter les allers-retours d'informations requis par la validation côté serveur.

Pour créer une fonction de validation côté serveur, fournissez un gestionnaire à l'événement ServerValidate qui effectue la validation. Il est possible d'accéder à la chaîne du contrôle d'entrée à valider en utilisant la propriété Value de l'objet ServerValidateEventArgs passé en tant que paramètre au gestionnaire d'événements. Le résultat de la validation est ensuite stocké dans la propriété IsValid de l'objet ServerValidateEventArgs.

Pour créer une fonction de validation côté client, ajoutez d'abord la fonction de validation côté serveur décrite précédemment. Puis, ajoutez à la page .aspx la fonction de script de la validation côté client.

Si vous utilisez Visual Basic, la fonction doit avoir le format suivant :

Sub ValidationFunctionName (source, arguments)

Si vous utilisez JScript, la fonction doit avoir le format suivant :

Function ValidationFunctionName (source, arguments)

Utilisez la propriété ClientValidationFunction pour spécifier le nom de la fonction de script de validation côté client associée au contrôle CustomValidator. Dans la mesure où la fonction de script est exécutée sur le client, le langage utilisé pour celle-ci doit être pris en charge par le navigateur cible, par exemple Visual Basic ou JScript.

Comme dans le cas de la validation côté serveur, l'utilisation de la propriété Value du paramètre arguments permet d'accéder à la valeur à valider. Retournez le résultat de la validation en définissant la propriété IsValid du paramètre arguments.

Note de sécurité :

Lors de la création d'une fonction de validation côté client, veillez à inclure la fonctionnalité de la fonction de validation côté serveur. Si vous créez une fonction de validation côté client sans fonction côté serveur correspondante, certaines parties de code nuisible risquent d'être ignorées lors de la validation.

Il est possible d'associer plusieurs contrôles de validation à un contrôle d'entrée pour valider différents critères. Par exemple, vous pouvez appliquer plusieurs contrôles de validation à un contrôle TextBox qui permet à l'utilisateur d'entrer la quantité d'articles à ajouter à un panier d'achat. Vous pouvez utiliser un contrôle CustomValidator pour vous assurer que la valeur spécifiée est inférieure à la quantité en stock et un contrôle RequiredFieldValidator pour vérifier que l'utilisateur a bien entré une valeur dans le contrôle TextBox.

Remarque :

Si le contrôle d'entrée est vide, aucune fonction de validation n'est appelée et la validation s'effectue correctement. Utilisez un contrôle RequiredFieldValidator pour empêcher l'utilisateur d'omettre un contrôle d'entrée.

Il est possible d'utiliser un contrôle CustomValidator sans définir la propriété ControlToValidate. C'est généralement le cas lorsque vous validez plusieurs contrôles d'entrée ou des contrôles d'entrée qui ne peuvent pas être utilisés avec des contrôles de validation, comme le contrôle CheckBox. Dans ce cas, la propriété Value du paramètre arguments passé au gestionnaire d'événements de l'événement ServerValidate ainsi qu'à la fonction de validation côté client contient toujours une chaîne vide (""). Ces fonctions de validation sont néanmoins appelées lorsque c'est nécessaire, pour déterminer la validité à la fois sur le serveur et sur le client. Pour accéder à la valeur à valider, vous devez faire référence par programme au contrôle d'entrée que vous voulez valider, puis récupérer la valeur de la propriété adéquate. Par exemple, pour valider un contrôle CheckBox sur le serveur, ne définissez pas la propriété ControlToValidate du contrôle de validation et utilisez le code suivant pour le gestionnaire de l'événement 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);
   
}

Pour plus d'informations sur le contrôle CustomValidator, consultez la classe System.Web.UI.WebControls.CustomValidator.

Exemples

L'exemple suivant montre comment utiliser le contrôle CustomValidator pour vérifier sur le serveur si la valeur entrée dans une zone de texte est un nombre pair. Le résultat de la validation s'affiche ensuite sur la page.

Note de sécurité :

Ces exemples de code contiennent des zones de texte qui acceptent l'entrée d'utilisateur, ce qui constitue une menace éventuelle pour la sécurité. Par défaut, les pages Web ASP.NET vérifient que les entrées d'utilisateur n'incluent pas de script ou d'éléments HTML. Pour plus d'informations, consultez Vue d'ensemble des attaques de script.

<%@ 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>

L'exemple de code suivant montre comment créer un contrôle CustomValidator qui exécute la même routine de validation que l'exemple précédent mais sur le client cette fois.

<%@ 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>

Voir aussi

Référence

CustomValidator

Autres ressources

Syntaxe des contrôles serveur de validation