2010-12-06 5 views
0

Ceci est un peu difficile à expliquer, alors s'il vous plaît gardez avec moi.Bouton radio généré dynamiquement appelant Evénement CheckedChanged

J'ai une procédure qui génère des boutons radio et attribue un événement de publication CheckedChanged basé sur le niveau traversé (jusqu'à 4 niveaux). Lorsque le premier niveau est coché (bouton radio sélectionné), l'événement de publication rb_CheckChanged00() est appelé et une vérification est effectuée pour voir si cet élément a des enfants, sinon il créera plus de boutons radio et affectera rb_CheckChanged01 à l'événement CheckChanged pour ceux-ci - Cette partie fonctionne bien.

Le problème que j'ai est lorsque je sélectionne le deuxième bouton radio qui a été créé (l'enfant), il ne semble pas du tout aller à l'événement de retour. La page est en train de poster quand je clique dessus mais tout se réinitialise car elle ne va pas dans rb_CheckChanged01.

Je sais que cette information est assez vague, mais j'espère que quelqu'un a une idée sur la façon dont fonctionne l'événement de retour et si je l'utilise de manière incorrecte.

utilisant: ASP.NET 2.0, IIS7

Merci.

Répondre

2

La plupart du temps, lorsque les événements du contrôle créé dynamiquement ne sont pas déclenchés, c'est parce que les contrôles sont réinitialisés lors de la publication.

Pour vous assurer que les mêmes contrôles sont créés à chaque fois, assurez-vous que les ID de contrôle sont définis sur les mêmes valeurs à chaque fois, avant que ViewState soit chargé. De cette façon, lorsque le contrôle est ajouté à la collection de contrôle de la page, une fois que ViewState est chargé, il conserve ses propriétés. (juste pour décrire ce qui se passe, en un mot)

Un des meilleurs articles que j'ai lus sur ce sujet est this one. Assurez-vous de le lire pour bien comprendre ce qui se passe en arrière-plan.

+0

Triés. Je génère maintenant mes boutons radio sur chaque publication en fonction des ID stockés dans une session. Ils ont exactement les mêmes ID que quand ils ont été postés et tout fonctionne. Merci de votre aide. – webnoob

1

On dirait que les RB enfants sont nettoyés avant de pouvoir déclencher l'événement. D'après mon expérience personnelle, il est préférable de suivre ces objets générés dynamiquement et de les régénérer à chaque publication. Les événements commencent à se déclencher :)

0

Seulement 1 chose peut causer cela, vous créez les rb sur page_load et ne les ajoutez pas à une liste <> ou quelque chose de similaire et cet objet à la session. Ce que vous devez faire est quand vous créez les articles, les ajoutez à une liste et ajoutez cette liste à la session ["RadioButtons"] et si le Page.IsPostBack est vrai, chargez vos contrôles un par un de votre liste qui est gardée dans votre session sur votre page

1

Vos contrôles et événements ne sont pas enregistrés dans ViewState, car les contrôles dynamiques doivent être chargés dans l'élément Page_Init. Comme ils ne sont pas conservés dans ViewState, ils ne seront pas enregistrés avec les événements. Une question similaire:

Problem with dynamic controls in .NET