IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ ASP.NET/VB.NET

logo
Sommaire > Les webforms > Formulaires et code-behind > Validators
        Qu'est-ce qu'un validator ?
        Peut-on se passer de la validation coté serveur et n'utiliser que la validation coté client ?
        A quel moment intervient la validation dans le cycle de vie d'une page ?
        Comment afficher un message d'erreur dans un validateur ?
        Quels sont les contrôles serveur que l'on peut valider ?
        Comment vérifier qu'une page est valide coté serveur ?
        Qu'est-ce qu'un groupe de validation ?
        Comment valider un RadioButton ?
        6.5.2.1. RequiredFieldValidator (1)
                A quoi sert le RequiredFieldValidator ?
        6.5.2.2. RangeValidator (1)
                A quoi sert le RangeValidator ?
        6.5.2.3. CompareValidator (1)
                A quoi sert le CompareValidator ?
        6.5.2.4. RegularExpressionValidator (1)
                A quoi sert le RegularExpressionValidator ?
        6.5.2.5. CustomValidator (2)
                A quoi sert le CustomValidator ?
                Comment passer des paramètres à la fonction de validation coté client ?
        6.5.2.6. ValidationSummary (1)
                A quoi sert le ValidationSummary ?



Qu'est-ce qu'un validator ?
auteur : nico-pyright(c)
Un validator est un contrôle serveur particulier qui permet de faire de la validation de saisie par l'utilisateur.
La collecte d'informations via un formulaire est une des nombreuses taches que peut effectuer une page d'un site web. Vous pouvez par exemple avoir besoin de saisir les coordonnées d'un client, des informations sur une commande, etc ...
Les pages web disposent de toute une série de contrôles qui permettent d'obtenir des saisies de l'utilisateur. Champ de texte, radio boutons, case à cochée, liste déroulante, etc ...
La validation des données constiste à vérifier qu'on récupère bien une date là où l'utilisateur doit saisir une date, qu'on récupère bien un nombre où l'on doit récupérer un nombre et pas une chaine.

Le framework ASP.NET simplifie ces vérifications à l'aide des validators. Ce sont des contrôles ASP.NET qui intègrent la logique permettant de vérifier la saisie des utilisateurs. Ils vont grandement nous simplifier la tache pour vérifier qu'un champ obligatoire est correctement saisi ou qu'une valeur correspond bien à ce qu'on attend, etc ...
Ils permettent de contrôler la saisie coté client si le navigateur le supporte, ce qui améliore l'interaction avec l'utilisateur.
Ils permettent également de valider les saisies du coté du server, ce qui est une étape OBLIGATOIRE.
Les validators nous facilitent grandement la tache en disposant d'un moyen puissant de contrôler la saisie et d'afficher des messages d'erreurs pour avertir de la saisie incorrecte.


Peut-on se passer de la validation coté serveur et n'utiliser que la validation coté client ?
auteur : nico-pyright(c)
Non ! Ou alors, à vos risques et périls. En effet, la validation coté client peut avoir été désactivée ou altérée par du code malveillant. La seule façon fiable de vérifier la validité d'une saisie est de la faire coté serveur.


A quel moment intervient la validation dans le cycle de vie d'une page ?
auteur : nico-pyright(c)
La validation des contrôles apparait à un moment précis du cycle de vie d'une page, entre la fin des événements d'initialisation par le code utilisateur et les événements des contrôles.
Cela se passe bien entendu après le chargement des valeurs du postback par la page... et avant les événements des contrôles. Cela permet de savoir au moment du click sur un bouton si la page est correcte et dans ce cas, rediriger vers la bonne page par exemple.
Il est important de comprendre l'ordre d'enchainement des événements, si l'on a à faire des traitements en cas d'erreur, ou en cas de succès de validation.


Comment afficher un message d'erreur dans un validateur ?
auteur : nico-pyright(c)
Il y a trois possibilités pour afficher un message d'erreur.
La première consiste à utiliser la propriété Text. Le message s'affiche en rouge par défaut

					<div>
	<asp:TextBox runat="server" ID="LeTextBox" />
</div>
<asp:RequiredFieldValidator runat="server" ControlToValidate="LeTextBox" Text="Le champ doit être saisi" />
<asp:Button runat="server" Text="Valider" />

				
La deuxième est d'utiliser la propriété ErrorMessage.
L'utilisation de la propriété ErrorMessage semble produire le même effet que la propriété Text. Il y a cependant une différence, le fait de définir la propriété ErrorMessage permettra au contrôle ValidationSummary de réutiliser le message d'erreur.

					<asp:RequiredFieldValidator runat="server" ControlToValidate="LeTextBox" ErrorMessage="Le champ doit être saisi" />

				
Enfin, on peut utiliser un message personnalisé entre les balises du controles. Ceci permet d'obtenir une présentation plus poussée en fonction des besoins.

					<asp:RequiredFieldValidator runat="server" ControlToValidate="LeTextBox">
	Le message doit être saisi <img src="erreur.jpg" alt="erreur de saisie" />
</asp:RequiredFieldValidator>

				
Il y a également trois modes d'affichage que l'on peut choisir en utilisant la propriété Display :
* Display="None" : Permet de ne pas afficher de message d'erreur. Le fait de ne pas afficher de message d'erreur peut être utile lorsqu'on utilise un ValidationSummary.
* Display="Dynamic" : Affiche le message d'erreur "dynamiquement", le message apparaitra à l'emplacement du validator en décalant les autres contrôles de la page. * Display="Static" : Affiche le message d'erreur "statiquement", c'est à dire que l'emplacement du message d'erreur est réservé. On voit un "trou" à l'emplacement ou sera affiché le message s'il y a une erreur. On utilise cette option lorsqu'on a besoin que l'affichage ou l'absence du message ne casse pas la présentation, dans des cellules d'un tableau par exemple.


Quels sont les contrôles serveur que l'on peut valider ?
auteur : nico-pyright(c)
Les contrôles serveur que l'on peut valider sont :

  • TextBox
  • ListBox
  • DropDownList
  • RadioButtonList
  • HtmlInputText
  • HtmlTextArea
  • HtmlSelect

Comment vérifier qu'une page est valide coté serveur ?
auteur : nico-pyright(c)
Pour vérifier que les validators de la page sont tous valides, on va tester la propriété IsValid de la page. Si elle vaut vrai, c'est que la validation est bonne, on peut poursuivre alors.

					Protected Sub ButtonClick(ByVal sender As Object, ByVal e As RoutedEventArgs)
	If Page.IsValid Then
		' la page est valide
		Response.Redirect("http://www.developpez.com")
	End If
End Sub

				

Qu'est-ce qu'un groupe de validation ?
auteur : nico-pyright(c)
Un groupe de validation permet de regrouper des validators et de les associer à un contrôle qui déclenchera la validation.
Il est assez courant d'avoir plusieurs boutons sur une page et seuls certains champs doivent être validés en fonction du bouton cliqué.
Imaginons une page qui contient une zone d'identification, avec un TextBox pour un login et un TextBox pour un mot de passe. Un bouton permet de valider ce login.
Sur cette même page, on a une zone qui permet de saisir un email pour s'inscrire à une newsletter, avec un TextBox et un bouton.
Il ne faut bien sur pas valider les informations du login si on choisit de s'inscrire à la newsletter.
Pour ceci, on va indiquer les contrôles qui sont reliés à un bouton en les plaçant dans un même groupe, grâce à la propriété ValidationGroup.
Ainsi, je pourrais placer sur la même page mes différents champs, mes différents boutons de validation et mes différents validators.

Par exemple, les contrôles associés au login seront dans le groupe login (ValidationGroup="login"):

					Login : <asp:TextBox runat="server" ID="Login" />
Mot de passe : <asp:TextBox runat="server" ID="Pwd" TextMode="Password" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="Login" 
	ErrorMessage="N'oubliez pas de saisir votre login" Display="dynamic" ValidationGroup="login" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="Pwd" 
	ErrorMessage="N'oubliez pas de saisir votre mot de passe" Display="dynamic" ValidationGroup="login" />

<asp:Button ID="Button1" runat="server" Text="Valider" OnClick="ButtonClick" ValidationGroup="login" />

				
Et les contrôles associés à la newsletter seront dans le groupe newsletter (ValidationGroup="newsletter").

					<asp:TextBox runat="server" ID="email" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="Login" 
	ErrorMessage="N'oubliez pas de saisir votre login" Display="dynamic" ValidationGroup="newsletter" />
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="email" 
	ErrorMessage="L'email saisi n'est pas correct" Display="dynamic" ValidationGroup="newsletter"
	ValidationExpression="^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|coop|info|museum|name))$" />
	
<asp:Button ID="Button2" runat="server" Text="Valider" OnClick="ButtonClickNewsLetter" ValidationGroup="newsletter" />

				

Comment valider un RadioButton ?
auteur : nico-pyright(c)
On va vu dans la question Quels sont les contrôles serveur que l'on peut valider ? qu'il n'était pas possible de valider un RadioButton.
Une solution est de passer par un CustomValidator.

					<h4>Civilité :</h4>
<asp:RadioButton id="Radio1" Text="M." GroupName="RadioGroup1" runat="server" />
<asp:RadioButton id="Radio2" Text="Mme" GroupName="RadioGroup1" runat="server"/>
<asp:RadioButton id="Radio3" Text="Mlle" GroupName="RadioGroup1" runat="server"/>

<asp:button ID="Button1" text="Valider" runat="server"/>
 
<asp:CustomValidator ID="CustomValidator1" runat="server" ClientValidationFunction="ValiderRadio" 
	OnServerValidate="ValiderRadio" ErrorMessage="Veuillez saisir la civilité" Display="dynamic" />

				
On va se servir de RegisterExpandoAttribute et passer à la fonction javascript cliente les ClientId des RadioButton.

					Page.ClientScript.RegisterExpandoAttribute(CustomValidator1.ClientID, "rb1Id", Radio1.ClientID)
Page.ClientScript.RegisterExpandoAttribute(CustomValidator1.ClientID, "rb2Id", Radio2.ClientID)
Page.ClientScript.RegisterExpandoAttribute(CustomValidator1.ClientID, "rb3Id", Radio3.ClientID)

				
Ce qui fait que la fonction javascript cliente pourra ressembler à :

					<script type="text/javascript">
function ValiderRadio(sender, args)
{
	var radio1 = document.getElementById(sender.rb1Id);
	var radio2 = document.getElementById(sender.rb2Id);
	var radio3 = document.getElementById(sender.rb3Id);
	if (radio1 && radio2 && radio3)
		args.IsValid = radio1.checked || radio2.checked || radio3.checked;
	else
		args.IsValid = false;
}
</script>

				
Sans oublier la méthode coté serveur :

					Protected Sub ValiderRadio(ByVal source As Object, ByVal args As ServerValidateEventArgs)
	args.IsValid = Radio1.Checked Or Radio2.Checked Or Radio3.Checked
End Sub

				


Consultez les autres F.A.Q's


Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2007 Dotnet Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.