Bonjour a tous
Dans le cadre d'un projet perso, j'ai une page permettant d'initialiser une appli web.
cette page fait appel à plusieurs UserControls.
Le premier est wucResume qui permet d'afficher l'ensemble des étapes, celles qui sont correctes, celles qui sont encore à faire,...
Ce userControl a des boutons pour executer les étapes de configs
WUCResume.ascx
boutons qui appellent des évènements de ma page principale
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <asp:Button ID="btnRunStep1" runat="server" Text="Run" onclick="btnRunStep1_Click" meta:resourcekey="btnRunStep1Resource1" /> ... <asp:Button ID="btnRunStep2" runat="server" Text="Run" onclick="btnRunStep2_Click" meta:resourcekey="btnRunStep2Resource1" />
WUCResume.ascx.cs
default.aspx.cs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public event EventHandler btnRunStep1Click; public event EventHandler btnRunStep2Click; protected void btnRunStep1_Click(object sender, EventArgs e) { btnRunStep1Click(sender, e); } protected void btnRunStep2_Click(object sender, EventArgs e) { btnRunStep2Click(sender, e); }
Le fonctionnement est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 protected void Step1_Click(object sender, EventArgs e) { ............. }
lors du chargement de la page, je charge mon WUCResume, je définis les évènements, l'affiche et précise en session que je suis sur le WUC resume
Lors du clic sur Step1, ou Step2, je sais grace a la session que je viens du wucResume et donc le recharge :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 if (!IsPostBack) { wucResume = (WUCResume)LoadControl("./wucresume.ascx"); wucResume.btnRunStep1Click += Step1_Click; wucResume.btnRunStep2Click += Step2_Click; phContent.Controls.Clear(); phContent.Controls.Add(wucResume); Session["action"] = "resume"; }
le code exécute lors la fonction de mon évènement se trouvant dans ma page qui va charger le wuc de l'étape voulue :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 protected void Page_Load(object sender, EventArgs e) { if (Session["action"] != null) { if (Session["action"].ToString().CompareTo("resume") == 0) { wucResume = (WUCResume)LoadControl("./wucresume.ascx"); wucResume.btnRunStep1Click += Step1_Click; wucResume.btnRunStep2Click += Step2_Click; phContent.Controls.Clear(); phContent.Controls.Add(wucResume); } else if (Session["action"].ToString().CompareTo("step1") == 0) { phContent.Controls.Clear(); wucStep1 = (WUCStep1)LoadControl("./wucstep1.ascx"); //add the usercontrol STEP1 in the place holder phContent.Controls.Add(wucStep1); } if(!IsPostback)........ }
Le UserControl Step1 s'affiche parfaitement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 protected void Step1_Click(object sender, EventArgs e) { phContent.Controls.Clear(); wucStep1 = (WUCStep1)LoadControl("./wucstep1.ascx"); //add the usercontrol STEP1 in the place holder phContent.Controls.Add(wucStep1); }
de plus dans le pageLoad de mon wucstep1:
L'ensemble de ces étapes fonctionnent parfaitement puisque je sais quel WUC est affiché par ma session et je le recharge donc lors du pageLoad.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 protected void Page_Load(object sender, EventArgs e) { Session["action"] = "step1"; }
Mais dans mon WUCStep1 il y a un bouton qui a son évènement dans le WUC et non dans la page default.
. Or lors du premier clic sur ce bouton rien ne se passe, la fonction appelée par le bouton n'est jamais appelée , il faut que je clique une deuxième fois sur ce bouton pour que la fonction soit appelée.
J'ai fait du pas à pas et c'est exactement le même code qui est exécuté à chaque fois, sauf que la seconde fois, la fonction est bien appelée....
Est ce que qqun aurait la cause de cette particularité et comment y remédier.
Merci
Partager