2017-03-13 42 views
1

J'ai une partie web visuelle et deux contrôles utilisateur. Sur Page_Load() d'une partie web visuelle i créer dynamiquement userControl1:L'événement de clic de bouton ne se déclenche pas dans le contrôle de l'utilisateur, créé dynamiquement dans un autre contrôle utilisateur

protected void Page_Load(object sender, EventArgs e) 
{ 
    UserControl1 userControl = Page.LoadControl(userControl1Path) as UserControl1; 
    userControl.ID = "UserControl1"; 
    this.Controls.Clear(); 
    this.Controls.Add(userControl); 
} 

En UserControl1 j'ai un bouton, cette charge deuxième contrôle utilisateur (UserControl2) (et il fonctionne!):

protected void GoToUserControl2_Click(object sender, EventArgs e) 
{ 
    UserContol2 userControl = Page.LoadControl(userControl2Path) as UserContol2; 
    userControl.ID = "UserContol2"; 
    this.Controls.Clear(); 
    this.Controls.Add(userControl); 
} 

UserControl2 aussi avoir un bouton, mais quand je clique dessus - cliquez sur l'événement ne se déclenche pas. Au lieu de cela, cliquez sur le bouton effectuer une redirection vers . Même si le bouton n'a aucun événement - il redirige vers UserControl1.

Aidez-moi, s'il vous plaît!

+0

Mettre un point de rupture dans votre chargement de la page, vous remarquerez que la fonction page_load est exécutée chaque fois qu'il ya un poste en arrière, je pense que votre chargement de la page efface le contrôle 2 et utiliser cas de contrôle 1 –

Répondre

1

Les contrôles générés dynamiquement doivent être recréés à chaque chargement de page, ce qui inclut un PostBack. Parce que le deuxième contrôle utilisateur est chargé uniquement sur un clic de bouton, il disparaît lorsqu'un autre PostBack est effectué. Vous devrez garder une trace si UserContol2 a été créé et si c'est le cas, rechargez-le dans le Load Load du parent. Dans cet extrait j'utilise un Session pour garder trace de l'ouverture de UserContol2.

Réglez la session en CLICK Méthode

protected void GoToUserControl2_Click(object sender, EventArgs e) 
{ 
    //rest of the code 
    Session["uc2_open"] = true; 
} 

Et vérifier Page_load si la session existe et si oui, créez le deuxième contrôle de l'utilisateur.

protected void Page_Load(object sender, EventArgs e) 
{ 
    UserControl1 userControl = Page.LoadControl(userControl1Path) as UserControl1; 
    userControl.ID = "UserControl1"; 
    this.Controls.Clear(); 
    this.Controls.Add(userControl); 

    if (Session["uc2_open"] != null) 
    { 
     UserContol2 userControl = Page.LoadControl(userControl2Path) as UserContol2; 
     userControl.ID = "UserContol2"; 
     this.Controls.Clear(); 
     this.Controls.Add(userControl); 
    } 
}