Gérer plusieurs usercontrol dans une même page
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
Code:
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" /> |
boutons qui appellent des évènements de ma page principale
WUCResume.ascx.cs
Code:
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);
} |
default.aspx.cs :
Code:
1 2 3 4 5
|
protected void Step1_Click(object sender, EventArgs e)
{
.............
} |
Le fonctionnement est le suivant :
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
Code:
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";
} |
Lors du clic sur Step1, ou Step2, je sais grace a la session que je viens du wucResume et donc le recharge :
Code:
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 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:
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);
} |
Le UserControl Step1 s'affiche parfaitement.
de plus dans le pageLoad de mon wucstep1:
Code:
1 2 3 4 5
|
protected void Page_Load(object sender, EventArgs e)
{
Session["action"] = "step1";
} |
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.
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