Existe-t-il un moyen élégant de comparer une case à cocher et une zone de texte à l'aide de validateurs ASP.NET?

StackOverflow https://stackoverflow.com/questions/88361

  •  01-07-2019
  •  | 
  •  

Question

J'ai un répéteur Asp.Net, qui contient une zone de texte et une case à cocher. Je dois ajouter une validation côté client qui vérifie que, lorsque la case à cocher est cochée, la zone de texte ne peut accepter qu'une valeur nulle ou vide.

J'aimerais utiliser un ou plusieurs contrôles de validation Asp.Net à cette fin, afin de fournir un affichage cohérent des erreurs côté client (les erreurs côté serveur sont gérées par un autre sous-système).

L’Asp: CompareValidator ne semble pas être assez souple pour effectuer ce type de comparaison complexe, il ne me reste donc plus qu’à regarder Asp: CustomValidator.

Le problème que je rencontre est qu’il ne semble pas y avoir de moyen de transmettre des informations personnalisées à la fonction de validation. Ceci est un problème car les identifiants ClientId de la case à cocher et de la zone de texte m’étaient inconnus à l’exécution (car ils font partie d’un répéteur).

Alors ... Mes options semblent être:

  1. Passez la zone de texte et la case à cocher au CustomValidator (cela ne semble pas possible).
  2. Recherchez la zone de texte via JavaScript en vous basant sur les arguments transmis par CustomValidator. Est-ce même possible, avec ClientId ambigu?
  3. Oubliez entièrement la validation et émettez du code JavaScript personnalisé (me permettant de transmettre les deux ClientIds à une fonction personnalisée).

Avez-vous des idées sur ce qui pourrait être une meilleure façon de mettre en œuvre cela?

Était-ce utile?

La solution

Je pense que le meilleur moyen serait d'hériter de BaseValidator dans une nouvelle classe et de transmettre ces ID à votre contrôle en tant qu'attributs. Vous devriez pouvoir résoudre les identifiants dans votre validateur sans connaître l'identifiant complet côté client généré lors de l'exécution. Vous devez d'abord valider les données sur le serveur, puis sur le client.

Autres conseils

Ne pouvez-vous pas insérer le CustomValidator dans le répéteur? Sinon, vous pouvez le créer dynamiquement lorsque le répéteur est lié et que l'utilisateur FindControl ()

protected MyDataBound(object sender, RepeaterItemEventArgs e) {
  (CheckBox)cb = (CheckBox)e.Item.FindControl("myCheckboxName");
  (TextBox)tb = (TextBox)e.Item.FindControl("myTextBox");
}

... ou quelque chose comme ça. J'ai fait le code par coeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top