2008-10-20 13 views
2

Contrôle utilisateur avec bouton - Lorsque uc est ajouté dynamiquement à une autre page, je perds le gestionnaire de boutons.Contrôle utilisateur avec bouton - Lorsque uc est ajouté dynamiquement à une autre page

Par exemple: J'ai 1 commande utilisateur avec 1 bouton - le bouton a un gestionnaire d'événements dans le code derrière. Lorsque j'ajoute le UserControl à une page par programmation, le gestionnaire de boutons ne se déclenche pas. Toute idée d'un moyen facile de résoudre ce problème.

Généralement, lorsque ive ajouté dynamiquement des contrôles à une page, j'ai dû re-câbler les gestionnaires d'événements sur chaque publication, mais j'espérais depuis que ce bouton était contenu dans un UserControl et l'uc a été ajouté dynamiquement je wouldnt le perdre - ne semble pas être le cas - y a-t-il une meilleure façon de le faire? Mon usercontrol aura finalement BEAUCOUP de boutons dessus et je ne veux pas avoir à les re-câbler à chaque fois depuis la page qui ajoute dynamiquement le usercontrol.

+0

Désolé je ne peux pas être d'aucune aide! Je n'ai pas écrit ASP.NET comme ça depuis des années, je fais tellement de JavaScript de nos jours que j'utilise à peine de telles choses. J'espère que vous aurez une meilleure réponse! –

+0

Où accrochez-vous exactement vos événements dans votre UserControl? –

Répondre

0

Parfois, lorsque vous ajoutez dynamiquement des contrôles à une page, les gestionnaires d'événements de bouton sont perturbés car les ID des contrôles ne sont plus synchronisés. Mais encore une fois, je devrais voir comment vous chargez dynamiquement les contrôles.

0

Lorsque vous ajoutez dynamiquement un contrôle, vous devez le créer à chaque fois dans la page hôte dans l'événement Page_Init.
Si vous le faites, assurez-vous que le gestionnaire d'événements click est câblé dans le OnInit du UserControl. Je pense que vous ne créez pas le contrôle dynamique à chaque fois.

2

Vous allez utiliser Page.LoadControl pour ajouter le contrôle ascx dans le gestionnaire d'événements OnInit de la page (bien que je l'ai fait dans le gestionnaire d'événements Load et il fonctionne, mais la documentation spécifie OnInit)

Votre nom d'utilisateur le contrôle (et la page) doit câbler leurs événements pour chaque chargement et publication this.buttonID.Click + = new System.EventHandler (this.buttonID_Click); Si vous faites cela alors tout devrait fonctionner, sinon, vérifiez votre balisage aspx/ascx car des caractères erronés tels qu'un < supplémentaire peuvent casser la page mais cela sera tout de même OK dans un navigateur.

0

L'ajoutez-vous à l'intérieur d'un UpdatePanel ajax? Le panneau de mise à jour capturerait la publication.

+0

Oui, je l'ajoute dans un panneau de mise à jour, je mets à jour mon message avec plus d'informations :-) – schmoopy