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
Le CustomValidator permet de créer sa propre fonction de validation, coté client et coté serveur.
On utilisera l'attribut ServerValidate pour fournir sa propre méthode de validation coté serveur.
A noter que la propriété ControlToValidate n'est pas obligatoire, on pourra effectivement utiliser directement les contrôles de la page pour faire notre validation.
Pour faire une validation coté client, il faudra créer une fonction javascript dont le nom sera passé à la propriété ClientValidationFunction. On utilisera également les paramètres pour donner le résultat de la validation et connaitre la valeur de l'objet associé à ControlToValidate.
On pourra utiliser ValidateEmptyText pour indiquer si un texte vide devra être soumis à validation. Cela ne nous dispense pas de devoir tester si la valeur est vide ou non, cela signifie que lorsqu'un contrôle est vide, on passera dans la fonction de validation.
Exemple de validation coté serveur :
<
asp:
TextBox runat=
"server"
ID=
"NombrePair"
/>
<
asp:
CustomValidator runat=
"server"
ControlToValidate=
"NombrePair"
ErrorMessage=
"Le nombre doit être pair"
ValidateEmptyText=
"true"
ClientValidationFunction=
"ValideNombrePair"
OnServerValidate=
"ValiderNombrePair"
Display=
"dynamic"
/>
<
asp:
Button runat=
"server"
Text=
"Valider"
OnClick=
"ButtonClick"
/>
protected
void
ButtonClick
(
object
sender,
EventArgs e)
{
if
(
Page.
IsValid)
{
// la page est valide, continuer
}
}
protected
void
ValiderNombrePair
(
object
source,
ServerValidateEventArgs args)
{
int
nombre;
if
(
int
.
TryParse
(
args.
Value,
out
nombre))
{
args.
IsValid =
nombre%
2
==
0
;
return
;
}
args.
IsValid =
false
;
}
Cette même validation coté client :
<
script type=
"text/javascript"
>
function ValideNombrePair
(
sender,
args)
{
if (
args.
Value ==
''
)
args.
IsValid =
false;
else
args.
IsValid = (
args.
Value %
2
==
0
);
}
</
script>
Pensez impérativement à tester le contenu de la propriété IsValid de la page. C'est cette propriété qui est garant de l'état de validité des données. Voir Comment vérifier qu'une page est valide coté serveur ?.
Lorsqu'on utilise des CustomValidator, il est possible de faire passer des valeurs entre le code behind et la fonction javascript du CustomValidator.
Pour ce faire, on va utiliser la méthode RegisterExpandoAttribute de l'objet Page.ClientScript.
Page.
ClientScript.
RegisterExpandoAttribute
(
CustomValidator1.
ClientID,
"valeur"
,
"5"
);
On utilise le ClientID du validator, on lui passe un nom (ici "valeur") et la valeur à passer (ici "5").
Et on pourra récupérer cette info coté client :
<
asp:
CustomValidator ID=
"CustomValidator1"
ValidateEmptyText=
"true"
ClientValidationFunction=
"Valider"
ControlToValidate=
"LeTextBox"
runat=
"server"
ErrorMessage=
"Le champ n'est pas valide"
/>
Avec le script suivant :
<
script type=
"text/javascript"
>
function Valider
(
sender,
args)
{
args.
IsValid =
(
args.
Value ==
sender.
valeur)
}
</
script>
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
void
ValiderRadio
(
object
source,
ServerValidateEventArgs args)
{
args.
IsValid =
Radio1.
Checked ||
Radio2.
Checked ||
Radio3.
Checked;
}