Bonjour,
Je repars de ce post-ci : http://www.developpez.net/forums/d68...rigger-ajoute/, j'ai changé le comportement, voici un résumé de ce que je veux faire et du problème qui se pose :
- UpdatePanel UP0 : écrit en dur dans la page aspx, ses éléments (dérivés de LinkButton) sont des async postback triggers pour l'UpdatePanel UP1
- au clic sur un élément de UP0, le code suivant s'exécute bien :
Première exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public void EltUp_Click(object sender, EventArgs e) { // appel d'une méthode qui ajoute va chercher les données // puis appelle UpdateUpContentFolder décrit ci-dessous }
- ajoute deux éléments au placeholder contenu dans UP1
- ajoute un event handler sur le clic sur ces éléments
- ajoute ces éléments en triggers de l'UpdatePanel UP2
Et c'est là que ça coince, car en cliquant sur un élément de UP1, je ne repasse pas dans la méthode "EltUp_Click" alors que je devrais.
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 /// <summary> /// Mise à jour graphique, liste de dossiers /// </summary> /// <param name="pl">PlaceHolder du panneau qui se met à jour</param> /// <param name="clickedFolderId">Identifiant du dossier cliqué</param> /// <param name="clickedFolderLevel">Niveau du dossier cliqué</param> /// <param name="currentPath">Chemin courant</param> /// <param name="elementList">Liste d'éléments à afficher</param> /// <param name="UPNN">Panneau de niveau N+1</param> private void UpdateUpContentFolders(PlaceHolder pl, string clickedFolderId, int clickedFolderLevel, string currentPath, ArrayList elementList,UpdatePanel UPNN) { FbFolder ff = null; pl.Controls.Clear(); int newLevel = clickedFolderLevel + 1; for (int i = 0; i < elementList.Count; i++) { localws.FbElement fbe = (localws.FbElement)elementList[i]; ff = new FbFolder(); ff.CurrentPath = currentPath; ff.ID = clickedFolderId + "_" + fbe.ElementId; ff.Text = fbe.ElementName; ff.Level = newLevel; ff.OnClientClick = "FbFolder_ClientClick(this.id)"; ff.Click += new EventHandler(EltUp_Click); pl.Controls.Add(ff); AsyncPostBackTrigger t = new AsyncPostBackTrigger(); t.ControlID = ff.ID; t.EventName = "Click"; UPNN.Triggers.Add(t); }
J'ai vérifié les variables en debug.
De plus, en ayant ajouté une animation "UpdatePanelAnimationExtender" à ce panneau UP1 (effet de fade out du contenu lorsque le panneau se recharge), je constate qu'elle est joué quand je clique sur un élément de UP1, alors que ça ne devrait pas (cf code des UpdatePanels ci-dessous : childrenAsTriggers à false).
Je résume :
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 <asp:UpdatePanel ID="UP0" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false"> <ContentTemplate> <mycontrols:FbFolder runat="server" ID="DX" Text="Elément 1" Level="0" OnClientClick="FbFolder_ClientClick(this.id)" OnClick="EltUp_Click"></mycontrols:FbFolder> <mycontrols:FbFolder runat="server" ID="INT" Text="Elément 2" Level="-1" OnClientClick="FbFolder_ClientClick(this.id)" OnClick="EltUp_Click"></mycontrols:FbFolder> </ContentTemplate> </asp:UpdatePanel> <asp:UpdatePanel ID="UP1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false"> <ContentTemplate> <asp:PlaceHolder runat="server" ID="UP1_PL" /> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="DX" EventName="Click" /> <asp:AsyncPostBackTrigger ControlID="INT" EventName="Click" /> </Triggers> </asp:UpdatePanel> <asp:UpdatePanel ID="UP2" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false"> <ContentTemplate> <asp:PlaceHolder runat="server" ID="UP2_PL" /> </ContentTemplate> </asp:UpdatePanel>
- ajout dynamique d'éléments avec event handler
- problème de l'évènement de clic non lancé
- problème de rafraîchissement du mauvais panneau.
Et pour finir, quand je clique sur un élément de UP1, il n'est pas trouvé par form1.FindControl(sonId) dans Page_Load.
Je vous remercie pour toute indication utile pour avancer car je commence à ne plus savoir comment faire (plusieurs que je travaille sur cette problématique de rafraîchissement de panneaux en cascade).
Je crois que je vais devoir passer en code javascript pour ajouter mes éléments et tout le toutim ?? Ca me semble moins évident à coder. NB : j'ai déjà une méthode OnClientClick pour surligner l'élément cliqué.
Barbara
Partager