Question

J'ai une page Web ASP.NET 2.0 avec 2 UserControls (.ascx). Chaque UserControl contient un groupe de validateurs. Placer un résumé de validation sur la page affichera toutes les erreurs de validation des deux UserControl. En plaçant un ValidationSummary dans chaque UserControl, toutes les erreurs des deux contrôles seront affichées deux fois.

Ce que je veux, c'est un ValidationSummary pour chaque UserControl, affichant uniquement les erreurs sur ce UserControl.

J'ai essayé de résoudre ce problème en définissant la propriété ValidationGroup des validateurs sur chaque utilisateur dynamiquement. Ainsi, chaque récapitulatif de validation ne doit afficher que les erreurs de son UserControl. J'ai utilisé ce code:

foreach (Control ctrl in this.Controls)
{
    if (ctrl is BaseValidator)
    {
        (ctrl as BaseValidator).ValidationGroup = this.ClientID;
    }
}
ValidationSummary1.ValidationGroup = this.ClientID;

Cela semble toutefois désactiver la validation côté client et côté serveur, car aucune validation n'a lieu lors de la soumission du formulaire.

Aide?

Était-ce utile?

La solution

Si vous utilisez ValidationGroups, la validation n'a lieu que si le contrôle à l'origine de la publication est affecté au même groupe de validation.

Si vous souhaitez utiliser un seul contrôle pour la publication, vous pouvez toujours le faire, mais vous devez appeler explicitement la méthode Page.Validate.

Page.Validate(MyValidationGroup1);
Page.Validate(MyValidationGroup2);
if(Page.IsValid)
{
    //do stuff
}

Suggestion: Pourquoi n'exposez-vous pas une propriété publique sur vos contrôles utilisateur appelée ValidationGroup? Dans le configurateur, vous pouvez définir explicitement le groupe de validation pour chaque validateur. Vous pouvez également utiliser votre boucle, mais il serait plus efficace de définir explicitement chaque validateur. Cela pourrait améliorer la lisibilité du code à l’aide des contrôles utilisateur.

Autres conseils

Le contrôle à l'origine de la soumission de votre formulaire (c'est-à-dire un contrôle Button) doit faire partie du même groupe de validation que les contrôles ValidationSummary et * Validator.

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