2009-04-30 6 views
0

J'ai un contrôle personnalisé avec plusieurs champs de zone de texte et une case à cocher.Désactivation des valideurs de champs obligatoires côté serveur de la case à cocher

Si la case est cochée, et que l'utilisateur soumet le formulaire, je dois leur permettre de continuer si la zone de texte est vide (et que la case est cochée).

Je dois implémenter ceci sans javascript.

Le problème est que sur l'événement OnInit du contrôle personnalisé, où je câline les zones de texte et leurs validateurs, je ne peux pas accéder à la valeur de la case à cocher.


J'ai essayé de passer outre la uniqueid de la case à cocher pour que je puisse désactiver en cas OnInit de contrôles personnalisés les fieldvalidators nécessaires si this.Context.Request.Form [ « CheckboxId »] = « On », mais dès que je redéfinis l'uniqueID de la checkbox, viewstate a cessé de fonctionner.

L'autre chose à laquelle je pensais est d'avoir un champ obligatoire requiredfieldvalidator qui prend la case à cocher dans le constructeur et est désactivé si la valeur est false.

Répondre

1

Avez-vous essayé d'effectuer la logique d'initialisation de commande lors de la Control.Load événement en redéfinissant la méthode Control.OnLoad à la place?
A ce stade du cycle de vie du contrôle, vous devriez pouvoir accéder à la valeur du CheckBox. Par ailleurs, si vous souhaitez désactiver la validation, vous n'avez pas nécessairement à désactiver tous les contrôles Validator. Au lieu de cela, vous pouvez simplement définir la propriété Button.CausesValidation sur False sur le bouton qui enverra le formulaire.

MISE À JOUR:
On dirait que vous construisez un contrôle utilisateur, qui est un contrôle complexe composé d'un ensemble de contrôles simples qui travaillent ensemble comme une unité.
Si vous voulez faire cela entièrement en code, comme vous le feriez avec un Custom Control, vous devriez hériter de la classe CompositeControl. Cela vous donne le meilleur des deux mondes. L'initialisation des contrôles enfants est ensuite effectuée en remplaçant la méthode CreateChildControls.

+1

Avez-vous un lien vers un article qui décrit comment faire cela? Tous les exemples que j'ai vus utilisent OnInit pour ajouter des contrôles dans un contrôle personnalisé. –

+0

Le bouton est en dehors du contrôle personnalisé qui inclut les contrôles validés - ce n'est donc pas une option. En ce moment, je vois la valeur de la case à cocher comme étant fausse quoi que ce soit dans OnLoad –

+0

J'ai mis à jour la réponse en fonction de vos commentaires –

Questions connexes