IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Problème EventHandler, UpdatePanel


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 45
    Par défaut Problème EventHandler, UpdatePanel
    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 :

    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
    }
    Première exécution :
    - 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
    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);
     
            }
    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.

    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).

    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>
    Je résume :
    - 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

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 45
    Par défaut
    J'ai trouvé mon bonheur ici : http://www.codeproject.com/KB/aspnet...?display=Print

    J'abandonne l'update panel et le postback, car cela est impossible à gérer dans mon cas (le postback efface les données, dans mon cas impossible de les recharger de façon simple), et j'utilise le principe des callbacks : un javascript appelle un script serveur. C'est de l'ajax de base à la sauce asp.net, alors que les update panels c'est du pseudo-ajax, bien pour des trucs simples seulement, pour des trucs en cascade c'est le b...

    Je mets donc résolu vu que ça marche presque. J'ai au moins appris même si je suis déçue du comportement des UpdatePanels qui semblait prometteur.

    Barbara

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'Updatepanel sous ASP.net
    Par TAMBOOH dans le forum ASP.NET
    Réponses: 15
    Dernier message: 20/01/2011, 14h05
  2. Problème Ajax - UpdatePanel
    Par bliss190 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/12/2009, 19h40
  3. Problème EventHandler Click sur LinkButton
    Par brazilia28 dans le forum ASP.NET
    Réponses: 14
    Dernier message: 28/04/2008, 12h32
  4. [ASP.NET][AJAX] Problème UpdatePanel /Click
    Par loic_86 dans le forum ASP.NET
    Réponses: 11
    Dernier message: 24/09/2007, 11h11
  5. ASP AJAX (problème UpdatePanel)
    Par Christophe@prog dans le forum ASP.NET
    Réponses: 2
    Dernier message: 16/07/2007, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo