FAQ ASP.NET/C#
FAQ ASP.NET/C#Consultez toutes les FAQ
Nombre d'auteurs : 39, nombre de questions : 371, dernière mise à jour : 15 juin 2021
- 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 ?
- 4.3.4.1. RequiredFieldValidator (2)
- 4.3.4.2. RangeValidator (1)
- 4.3.4.3. CompareValidator (1)
- 4.3.4.4. RegularExpressionValidator (2)
- 4.3.4.5. CustomValidator (3)
- 4.3.4.6. ValidationSummary (1)
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.
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.
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.
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 contrôles. 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.
Les contrôles serveur que l'on peut valider sont :
- TextBox
- ListBox
- DropDownList
- RadioButtonList
- HtmlInputText
- HtmlTextArea
- HtmlSelect
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
void
ButtonClick
(
object
sender,
EventArgs e)
{
if
(
Page.
IsValid)
{
// la page est valide
Response.
Redirect
(
"http://www.developpez.com"
);
}
}
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"
/>