2009-12-30 4 views
3

Je semble rencontrer un problème lors de l'obtention du gestionnaire d'événements pour un groupe de cases dynamiques. Le code est posté ici. Je pensais que ce serait assez simple, les cases à cocher n'apparaissent pas dans un répéteur, datagrid, etc. Ils apparaissent dans une table qui est située à l'intérieur d'un div qui se trouve au centre de l'écran. Toute aide serait grandement appréciée.Evénement CheckedChanged pour la case à cocher ne se déclenche pas pour les cases à cocher dynamiques

  foreach (SelectAssignedRolesByUserResult role in assignedRoles) 
      { 
       CheckBox cb = new CheckBox(); 
       cb.ID = string.Format("CheckBox_{0}_{1}", role.role_nm, role.role_id); 
       cb.Text = role.role_nm; 
       cb.Attributes.Add("role_id", role.role_id.ToString()); 
       cb.Attributes.Add("assigned_role_id", role.assigned_role_id.ToString()); 
       cb.Checked = (role.assigned_role_id > 0); 
       cb.CheckedChanged += new EventHandler(cb_CheckedChanged); 

       TableCell cell = new TableCell(); 
       TableRow row = new TableRow(); 

       cell.Controls.Add(cb); 
       row.Cells.Add(cell); 
       TableAssignedRoles.Rows.Add(row); 
      } 
+1

la méthode sont-ils en cours de création? page_init? page_load? –

Répondre

0

Pouvons-nous voir plus de code? À quel moment du cycle de vie appelez-vous le code ci-dessus? Si vous ne recréez pas les cases exactement de la même manière à chaque publication, de sorte que chaque case à cocher se voit attribuer le même ID et puisse charger ViewState correctement, vous perdrez vos gestionnaires d'événements.

1

Vous ne mentionnez pas où le code qui ajoute dynamiquement les cases à cocher est appelé. Je devine que vous mettez cela dans le gestionnaire d'événements Page_Load, ou dans un sous qui est appelé à partir de Page_Load.

Si tel est le cas, déplacez-le de Page_Load à Page_Init.

C'est une explication très non technique du raisonnement pour cela:

En effet, si les contrôles sont sélectionnés se produit ou non lorsque la page parse le ViewState. Dans le cycle de vie de la page, le Page_Init charge les contrôles initiaux, puis l'état viewstate est appliqué, puis le Page_Load se déclenche.

Ajouté

Et ne pas oublier d'ajouter

cb.AutoPostBack = true; 
+0

Je devrais juste mettre une réponse comme la tienne plutôt que de poser une question, haha. +1 pour vous alors. –

+0

Oui, probablement. J'ai commencé à taper la réponse avant que j'aie vu votre commentaire, donc je n'ai pas volé votre idée, mais je vous donnerais un upvote si vous aviez répondu. – David

Questions connexes