Partager via


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

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 pour l'événement ServerValidate qui exécute la validation. La chaîne du contrôle d'entrée à valider est accessible au moyen de la propriété Value de l'objet ServerValidateEventArgs passée au gestionnaire d'événements sous forme de paramètre. 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é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 sur un contrôle TextBox qui permet à l'utilisateur d'entrer la quantité d'articles à ajouter dans un panier d'achat. Vous pouvez utiliser un contrôle CustomValidator pour vérifier que la valeur spécifiée est inférieure à la quantité en stock et un contrôle RequiredFieldValidator garantissant que l'utilisateur entre une valeur dans le contrôle TextBox.

RemarqueRemarque

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. Cette situation est fréquente lorsque la validation porte sur plusieurs contrôles d'entrée ou sur des contrôles d'entrée qui ne peuvent pas être utilisés avec des contrôles de validation, tels que le contrôle CheckBox. Dans ce cas, la propriété Value du paramètre arguments passé au gestionnaire d'événements pour ServerValidate et à 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é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 l'entrée d'utilisateur n'inclut pas de script ni 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