2010-11-05 20 views
5

J'ai un contrôle UserControl enveloppant autour d'un DropDownList pour gérer la traduction spécifique au langage sur les valeurs DropDownList. J'ai également un validateur de champ requis qui est requis pour la liste déroulante interne.ASP.NET - Contrôle de validation à l'intérieur de UserControl

Comment puis-je exposer ce contrôle via la commande usercontrol pour permettre la validation?

L'erreur que je reçois actuellement est la suivante:

... cannot be validated. at System.Web.UI.WebControls.BaseValidator.CheckControlValidationProperty(String name, String propertyName) 
     at System.Web.UI.WebControls.BaseValidator.ControlPropertiesValid() 

Edit: J'utilise maintenant ...

[ValidationPropertyAttribute("SelectedValue")] 

.... Avec

public string SelectedValue 
{ 
    get { return cboI18nItems.SelectedValue; } 
} 

Qui fonctionne maintenant si je vérifie la propriété IsValid de la page sur la publication.

Répondre

5

Votre Validateur doit se trouver dans votre UserControl mais accessible à partir de la page.

Ou mettre ValidationProperty sur le UserControl

  1. Mettre le validateur à l'intérieur du UserControl. Il peut accéder à l'ID du contrôle d'entrée de données.
  2. Utilisez un CustomValidator. N'utilisez pas sa propriété ControlToValidate. Au lieu de cela, au sein de votre propre fonction d'évaluation vous accéderez au DropDownList via le UserControl. Vous allez probablement créer le champ DropDownList public afin qu'il puisse être vu une fois que vous avez transtypé l'objet UserControl à la classe de ce UserControl .
  3. Il est possible d'utiliser ValidationPropertyAttribute. Vous devez ajouter une propriété à votre usercontrol qui renvoie une chaîne valeur des données.

here trouvé.

+0

Grâce à la fonction ValidationProperty, j'ai oublié que cela ne se produirait que sur le serveur, ce qui m'oblige à vérifier la propriété IsValid de la page lors de la publication. – cweston

+0

Merci, Le "Ne pas utiliser sa propriété ControlToValidate" l'a fait pour moi. – JanBorup

1

J'ai traité ce problème un peu différemment de ce qui a été suggéré ci-dessus. Voici un extrait de code tiré de mon code:

Protected Sub ValidateCreditCard() 
    Dim validators = Page.GetValidators("cc") 
    For Each v In validators 
     DirectCast(v, BaseValidator).Validate() 
    Next 
End Sub 

Code VB.NET mais devrait être facile à comprendre.