FAQ ASP.NET/VB.NET
FAQ ASP.NET/VB.NETConsultez toutes les FAQ
Nombre d'auteurs : 38, nombre de questions : 369, dernière mise à jour : 16 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
Sub
ButtonClick
(
ByVal
sender As
Object
, ByVal
e As
RoutedEventArgs)
If
Page.IsValid
Then
//
la page est valide, continuer
End
If
End
Sub
Protected
Sub
ValiderNombrePair
(
ByVal
source As
Object
, ByVal
args As
ServerValidateEventArgs)
Dim
nombre As
Integer
If
Int32.TryParse
(
args.Value
, nombre) Then
args.IsValid
=
nombre%2
==
0
return
End
If
args.IsValid
=
false
End
If
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
Sub
ValiderRadio
(
ByVal
source As
Object
, ByVal
args As
ServerValidateEventArgs)
args.IsValid
=
Radio1.Checked
Or
Radio2.Checked
Or
Radio3.Checked
End
Sub