Bonjour,
Apres des kilometres de lecture parfois noir dans la compréhension. j'ai fini par me lancé.
j'ai donc a titre d'exemple créer une page et trois usercontrol.
Dans cette page je charge mes controls dynamiquement via une valeur en viewstate.
Chaque control possede un evenement.
Je me sert de cette evenement pour incrémenter la valeur du viewstate du control via une propriete qui incremente une valeur du viewstate de la page via une autre propriete pour charger le control suivant dynamiquement.
exemple:
page action = 1 > charge control 1
control 1 chargé > assigne propriete > déclenche evenement pour assigné proprieté page.
code des 3 usercontrols
code de la page
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
25
26
27 public partial class ControlTest1 : System.Web.UI.UserControl { public event EventHandler ActionControl; public String Action { get { String s = (String)ViewState["Action"]; return ((s == null) ? String.Empty : s); } set { ViewState["Action"] = value; if (this.ActionControl != null) this.ActionControl(this, EventArgs.Empty); } } protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { } }
en gros un control appel un autre control.
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 public partial class _Default : System.Web.UI.Page { MultiControl.Controls.ControlTest1 uc1; MultiControl.Controls.ControlTest2 uc2; MultiControl.Controls.ControlTest3 uc3; protected String Action { get { String s = (String)ViewState["Action"]; return ((s == null) ? "1" : s); } set { ViewState["Action"] = value; } } protected void Page_Load(object sender, EventArgs e) { switch (this.Action) { case "1": uc1 = (MultiControl.Controls.ControlTest1)this.Page.LoadControl("~/Controls/ControlTest1.ascx"); uc1.ActionControl += new EventHandler(uc1_ActionControl); uc1.Action = "2"; this.form1.Controls.Add(uc1); break; case "2": uc2 = (MultiControl.Controls.ControlTest2)this.Page.LoadControl("~/Controls/ControlTest2.ascx"); uc2.ActionControl += new EventHandler(uc2_ActionControl); uc2.RetourControl += new EventHandler(uc2_RetourControl); uc2.Retour = "1"; uc2.Action = "3"; this.form1.Controls.Add(uc2); break; case "3": uc3 = (MultiControl.Controls.ControlTest3)this.Page.LoadControl("~/Controls/ControlTest3.ascx"); uc3.ActionControl += new EventHandler(uc3_ActionControl); uc3.Action = "2"; this.form1.Controls.Add(uc3); break; } Response.Write(this.Action); } void uc2_RetourControl(object sender, EventArgs e) { this.Action = "1"; } void uc3_ActionControl(object sender, EventArgs e) { this.Action = uc3.Action; } void uc2_ActionControl(object sender, EventArgs e) { this.Action = uc2.Action; } void uc1_ActionControl(object sender, EventArgs e) { this.Action = uc1.Action; } }
La question que je me pose est de savoir si la methode en elle meme est la reecriture de quelque chose de deja existant, ou est ce que la methode de chargement est conforme au cycle de vie d'une page.
j'espere ne pas trop confu dans mon explication
merci
Partager