2009-04-27 8 views
6

Je charge dynamiquement un UserControl dans une vue d'un contrôle MultiView. Bien que le UserControl ajoute un gestionnaire d'événements, l'événement ne se déclenche jamais.Le gestionnaire d'événements UserControl ne déclenche pas

Qu'est-ce qui me manque ici? Merci!

contenant la page ASPX:

protected override void OnPreRender(EventArgs e) 
{ 
    if (MultiView1.ActiveViewIndex == 2) //If the tab is selected, load control 
    { 
     Control Presenter = LoadControl("Presenter.ascx"); 
     (MultiView1.ActiveViewIndex.Views[2].Controls.Add(Presenter); 
    } 
    base.OnPreRender(e); 
} 

Presenter.ascx.cs

override protected void OnInit(EventArgs e) 
{ 
    Retry.Click += this.Retry_Click; //This is a .Net 2.0 project 
    base.OnInit(e); 
} 


protected void Retry_Click(object sender, EventArgs e) 
{ 
    //This never fires 
} 

Répondre

8

Je pense qu'il ne se déclenche pas parce que vous chargez le contrôle dans l'événement prerender de votre page. Lors de la publication, le contrôle est perdu car il n'y a pas d'état d'affichage. Par conséquent, il n'y a aucun contrôle pour déclencher son événement. Essayez de charger le contrôle dans l'événement init de la page. Dites-nous ce qui se passe!

+0

C'était tout. THX! J'ai dû également supprimer l'instruction If, car à OnPreInit, MultiView1.ActiveViewIndex n'est pas défini. –

+0

vous êtes les bienvenus. –

+0

Merci beaucoup! –

1

Il semble que le contrôle n'est pas ajouté après chaque republier, je prendrais la Si la déclaration dans la page aspx contenant pour voir si cela résout le problème ... im supposer Retry est un bouton?

+0

J'avais déjà essayé de supprimer l'instruction If - aucune différence. Oui, Retry est un bouton. –

6

La gestion des événements de publication est effectuée avant le rendu, de sorte que le contrôle n'est pas présent dans la page dans votre cas.

Les événements du cycle de vie sont tirés dans cet ordre (sautées quelques-uns):

  1. Init
  2. Charge
  3. PreRender
  4. Décharger

et la gestion des événements se fait entre Load et PreRender (au cas où certains événements changeraient la façon dont la page devrait être rendue, cela a du sens). Il suffit donc de déplacer votre code qui charge le contrôle Retry pour charger ou initialiser.

Référence: Asp.Net Page Life Cycle Overview

2

Le contrôle doit être visible d'abord être en mesure d'entrer dans l'événement OnPreRender. mais peut-être que vous voulez que ce soit invisible. l'être sûr d'avoir EnableViewState = false;