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 Click sur LinkButton


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 162
    Par défaut Problème EventHandler Click sur LinkButton
    Bonjour à tous,

    Sur ma page aspx, je construis dynamiquement sur le Page_Load() des LinkButton avec un EventHandler pour exécuter la méthode SupprProduit().

    Voici mon code :

    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
     
     
    protected void Page_Load(object sender, EventArgs e)
    {
     LinkButton lien2 = new LinkButton();
                lien2.Text = "Supprimer";
                lien2.CommandArgument = elt.Id.ToString();
                lien2.Click += new System.EventHandler(supprProduit);
    }
     
     public void supprProduit(object sender, EventArgs e)
        {   
            LinkButton L = sender as LinkButton;
            Produit prd = new Produit();
            prd.SupprimerProduit(int.Parse(L.CommandArgument));
            Response.Redirect("~/admin/Produits/Liste.aspx");
        }
    Mon problème est que la méthode supprProduit n'est jamais appelée. Lorsque je clique sur mon LinkButton, rien ne se passe? J'ai essayé de débugger, mais aucun résultat.

    Avez-vous une réponse à mon problème ?

    Merci beaucoup

  2. #2
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    Où ajoutes-tu le contrôle que tu crées dans les contrôles de la page ?

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 162
    Par défaut
    Ah pardon, je n'ai pas mis tout le code.

    Je rajoute le LinkButton dans un div de ma page.
    L'ajout du LinkButton se fait bien dans ma page, pas de problèmes de ce côté-là.

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    En fait avant de faire l'évenement onclick asp.Net fait d'abord le Page_Load et je pense que ton problème vient de là.
    Normalement tu dois ajouter dynamiquement qu'une seule fois. hors là tu le recrées à chaque fois.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 108
    Par défaut
    salut, j'ai le meme probleme sauf que je n'ais pas d'évenement onLoad mais une méthode render, qui doit etre faite avant mon évenement onclick

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    n'aurait tu pas un IsPostBack qui traine.

    Si ton evenement n'est pas lancé y'a de grande chance que ca soit parce qu' il retrouve pas ton control, en tous cas le même control que celui qui lance l'evenement.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Par défaut
    Bonjour

    En ASP.Net, les évènements sont déclenchés avant le OnLoadComplete de la page.
    Essaie de créé ton LinkButton dans le Page_Init.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 108
    Par défaut
    J'ai fais comme ceci mais a chaque fois il fait le render et ne fait pas le onclick

    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
    protected override void Render(HtmlTextWriter writer)
            {
     
                SPWeb mySite = SPControl.GetContextWeb(Context);
                SPList todList = mySite.Lists["maListe"];
     
     
                        LinkButton myLink = new LinkButton();
                        Controls.Add(myLink);
                        myLink.Text = "monTItre"
                        myLink.Click += new EventHandler(_submitBt_Click);
                        myLink.RenderControl(writer);
     
     
                }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     void _submitBt_Click(object sender, EventArgs e)
            {
                Context.Session["page"] = "submit";
     
            }

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Par défaut
    Le render est exécuté beaucoup trop tard dans le cycle de vie d'une page asp.net.

    Au moment où le framework va chercher le contrôle pour exécuter ton évènement, ce controle n'existe pas encore.

    Sur ce lien, tu trouveras l'enchainement des évènements
    http://msdn2.microsoft.com/fr-fr/lib...72(VS.80).aspx

    Il faut que ton controle soit recréé par le framework avant la gestion des évènements.
    Fais une tentative sur le Page_Init.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 108
    Par défaut
    Le problème c'est que je créer plusieurs linkbuttons à la volé alors je les créer et les affichent dans le render, comment faire autrement?

    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
    protected override void Render(HtmlTextWriter writer)
            {
                // TODO: add custom rendering code here.
                SPWeb mySite = SPControl.GetContextWeb(Context);
                SPList todList = mySite.Lists["tod"];
     
     
     
                      Context.Session["page"] = "home";
                    writer.Write("<marquee behavior=\"scroll\" direction=\"up\" scrollamount=\"1\" scrolldelay=\"1\" onmouseover=\"this.stop()\" onmouseout=\"this.start()\">");
                    int num = 0;
     
     
                    foreach (SPListItem item in todList.Items)
                    {
                        num += 1;
                        LinkButton myLink = new LinkButton();
                        Controls.Add(myLink);
                        myLink.Text = item["Title"].ToString();
                        myLink.ID = "lb_" + num;
                        myLink.Click += new EventHandler(_submitBt_Click);
                        myLink.RenderControl(writer);
     
                        writer.Write(" - Modified: " + item["Modified"].ToString() + "<br><br>");
                    }
                    writer.Write("</marquee>");
     
     
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void _submitBt_Click(object sender, EventArgs e)
            {
                Context.Session["page"] = "submit";
     
            }

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Mais pkoi le faire absolument dans le render?

    Tu peux aussi mettre un placeHolder ,par exemple, et faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    placeholder.Controls.Add(TonlinkButton);
    Dans le onload par exemple.

  12. #12
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Bon je me repond à moi même c'est pas bien mais c'est parce que ma réponse précédente était légèrement étonné.

    Je n'avais pas vu le marquee.

    J'ai fais un petit code pour te montrer dans l'esprit ce que cela pourrait donné.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        protected void Page_Load(object sender, EventArgs e)
        {
     HtmlGenericControl marquee = new HtmlGenericControl("marquee");
    marquee.Attributes.Add("behavior", "scroll");
    /*evidement tu veilleras a mettre tous tes attributs*/
    LinkButton link = new LinkButton();
    link.Text = "toto";
    marquee.Controls.Add(link);
    pl.Controls.Add(marquee);
    }

  13. #13
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 142
    Par défaut
    salut, apparemment tu fait une webpart pour SharePoint. Tes controls doivent être créer dans le CreateChildControls. Le render est beaucoup trop tard !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    protected override void CreateChildControls()
    {
       LinkButton myLink = new LinkButton();
       myLink.ID = "Link1";
       this.Controls.Add(myLink)
    }
    Si tu as des questions SharePoint, passe nous voir dans la bonne section

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 108
    Par défaut
    Merci pour toutes vos réponses mais là je suis complètement perdu

    voici le code entier

    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
     
    System.Web.UI.WebControls.WebParts.WebPart
        {
     
     
            public Web_Part_Tip_Of_The_Day()
            {
                this.ExportMode = WebPartExportMode.All;
            }
     
            protected override void CreateChildControls()
            {
     
    //là si je comprend bien de dois créer mes controls
     
                SPWeb mySite = SPControl.GetContextWeb(Context);
                SPList todList = mySite.Lists["maListe"];
                int num = 0;
     
                foreach (SPListItem item in todList.Items)
                {
                    num += 1;
                    LinkButton myLink = new LinkButton();
                    Controls.Add(myLink);
                    myLink.Text = item["Title"].ToString();
                    myLink.ID = "lb_" + num;
     
    //je rajoute mon eventHandler pour chaque bouton, chaque bouton déclanchera la meme méthode "_submitBt_Click" avec des paramétres différents, je sais pas encore passer les paramétre mais chaque chose en son temps!
     
                    myLink.Click += new EventHandler(_submitBt_Click);
                }
     
            }
     
     
            //maintenant si j'ai bien compris c'est la méthode qui permet l'affichage
     
            protected override void Render(HtmlTextWriter writer)
            {
     
     
     
                if (Context.Session["mesParam"] = "toto")
                {
                    writer.Write("toto");
     
     
                }
                else {
                    // là j"aimerais afficher mes link button
     
                  ????
                }
     
            }
     
            void _submitBt_Click(object sender, EventArgs e)
            {
     
                Context.Session["mesParam"] = "toto";
     
            }
    Quand je clic sur un linkbutton, la page est rechargée, quand est ce que ma méthode _submitBt_Click est executée?

  15. #15
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    le déclenchement est fait après le postbak.

    Mais ce qui m'inquiéte dans ton code c'est que tu touche aux Id des LinkButton.

    Es tu sur de ce que tu fais?
    Ca peut être un motif très probable de la non lever de tes événements.

    Ayant deja eu des probleme avec le create child j'ai refais un test.
    j'ai place ce code dans le createChold et dans le onload:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            HtmlGenericControl ctr = new HtmlGenericControl("marquee");
            ctr.Attributes.Add("behavior", "scroll");
            for (int i = 0; i < 3; i++)
            {
     
                LinkButton link = new LinkButton();
                link.Text = "toto  ";
                link.Click += new EventHandler(link_Click);
                ctr.Controls.Add(link);
            }
            pl.Controls.Add(ctr);
    Et dans le createChild la première fois l'événement n'est pas levé (ensuite pas de problème)
    Pas de probléme dans le OnLoad. Tous marche bien.
    Il faut savoir que moi mon environnement est dans une page normal et pas dans un webpart.

    Et vérifies que tes Id soient bien les mêmes à chaque fois si tu y touches.

Discussions similaires

  1. problème de click sur un bouton
    Par KTARIK dans le forum Composants graphiques
    Réponses: 10
    Dernier message: 15/05/2013, 10h15
  2. Evenement Click sur LinkButton
    Par bakman dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/05/2013, 08h33
  3. Réponses: 2
    Dernier message: 27/05/2009, 11h48
  4. Problème de click sur un bouton
    Par Naruto_kun dans le forum C#
    Réponses: 2
    Dernier message: 26/09/2008, 16h27
  5. Problème de click sur la Form.
    Par Sixdeux dans le forum Windows Forms
    Réponses: 6
    Dernier message: 23/05/2007, 18h00

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