FAQ ASP.NET/C#Consultez toutes les FAQ

Nombre d'auteurs : 39, nombre de questions : 371, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireWebFormsContrôlesContrôles de validationCustomValidator

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 :

 
Sélectionnez

<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" />
 
Sélectionnez

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 :

 
Sélectionnez

<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 ?.

Créé le 13 octobre 2008  par nico-pyright(c)

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.

 
Sélectionnez

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 :

 
Sélectionnez

<asp:CustomValidator ID="CustomValidator1" ValidateEmptyText="true" ClientValidationFunction="Valider" 
	ControlToValidate="LeTextBox" runat="server" ErrorMessage="Le champ n'est pas valide" />

Avec le script suivant :

 
Sélectionnez

<script type="text/javascript">
function Valider(sender, args)
{
	args.IsValid = (args.Value == sender.valeur)
}			
</script>
Créé le 13 octobre 2008  par 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.

 
Sélectionnez

<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.

 
Sélectionnez

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 à :

 
Sélectionnez

<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 :

 
Sélectionnez

protected void ValiderRadio(object source, ServerValidateEventArgs args)
{
	args.IsValid = Radio1.Checked || Radio2.Checked || Radio3.Checked;
}
Créé le 13 octobre 2008  par nico-pyright(c)
  

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 et 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.