2011-06-15 3 views
4

j'ai produit quelques boutons et attaché à eux un eventhandler comme celui-ci:CommandEventArgs et événements question

Button pgs = new Button();//Create New Topic 
pgs.Width = 20; 
pgs.Command += obtainTopicsPerPage_Click; 
pgs.CommandName = tPage.ToString(); 
pgs.Text = tPage.ToString(); 
btns.Add(tPage.ToString()); 
buttons.Add(pgs); 
} 

void obtainTopicsPerPage_Click(Object sender, CommandEventArgs e) 
{ 
    foreach (var item in tPages) 
    { 
     if (item.Key == e.CommandName) 
     { 
      foreach (var posts in item.Value) 
      { 
       posts.ExecuteAll(); 
      } 
     } 
    } 
    MyButtonTable(); 
} 

Maintenant, le eventhandler déclenche jamais quand je clique sur le bouton. je vérifie avec le débogueur ,, et quand je clique sur le bouton, il n'y a qu'un postback ,, mais il ne marche pas atteindre à l'intérieur du eventhandler functoin

Mise à jour:

void Page_PreInit(object sender, EventArgs e) 
{ 
    List<Button> btn=(List<Button>)ViewState["Buttons"]; 
    foreach (var item in btn) 
    { 
      item.Width = 20; 
      item.Command += obtainTopicsPerPage_Click; //resigning the eventhandlers from the begining 
      item.CommandName = tPage.ToString(); 
      item.Text = tPage.ToString(); 
    } 
} 
+2

Reliez-vous les événements de bouton après la publication? – WraithNath

+0

ne devrait pas être pgs.Command + = new CommandEventHandler (this.obtainTopicsPerPage_Click); ? – Reniuz

+0

pas vraiment, Renius ... ,, non je ne WraithNath – Matrix001

Répondre

3

Cela est souvent le cas lorsque générer dynamiquement les boutons. Lorsque la page est publiée, la page ne possède plus les boutons et ne peut donc pas les lier aux gestionnaires d'événements.

La solution la plus simple consiste à s'assurer que vous générez à nouveau tous les boutons du Page_Init à chaque chargement de la page.

+0

Mais les boutons que je génère est une liste, qui est générée dynamiquement à travers le code .. Les sont générés en fonction du nombre de messages qu'il y a dans le forum ... devrait je sauvegarde la liste dans un état d'affichage puis la place dans le page_init ... pour être itérée? – Matrix001

+0

Vous pouvez utiliser le même code que vous avez utilisé pour générer la liste originale des boutons. Vous avez juste besoin de vous assurer qu'il fonctionne sur chaque page_init afin que les boutons soient toujours là. Si les boutons sont susceptibles d'avoir changé entre le premier chargement et la première publication, vous pouvez stocker les données dynamiques dans viewstate afin de reconstituer le jeu de boutons d'origine. Dans l'ensemble cependant, la clé est juste de les reconstruire tous. –

+0

Alors, comment puis-je conserver leurs eventhandlers ... Est-ce que ça suffit? voir ma question mise à jour ci-dessus – Matrix001