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 :

Boutons asp dynamiques


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut Boutons asp dynamiques
    Bonjour,

    je suis actuellement en stage et je dois concevoir un site web en asp.net.
    C'est un site immobilier où l'on peut rechercher ou ajouter des biens.
    J'ai crée une page où toute la liste des biens s'affiche.

    Au chargement de la page donc au pageLoad, je parcours une liste de biens et pour chaque bien je génère le code html correspondant en faisant de nouveaux Literal, Literal.Text ="blabla".

    Il y a pour chaque bien, un bouton correspondant qui doit rediriger vers une autre page qui affiche la fiche produit du bien en détail.
    Je crée pour cela un bouton asp dynamique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
         Button bt = new Button();
         bt.ID = "btn" + compt;
         bt.Text = "Voir";
         bt.CssClass = "btnVoir";
         bt.Click += new EventHandler(valider_Click);
         PlaceHolder1.Controls.Add(bt);
    Cependant j'ai un problème avec l'appelle de la fonction valider_Click au clic du bouton.
    En effet quand je clique sur le bouton, la fonction n'est pas appelée et la page de la liste des biens se recharge et est vide (plus aucun biens).
    Mon problème est donc que la fonction malgré le click n'est pas appelée
    Voici la partie du code concernée:
    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
     
    protected void Page_Load(object sender, EventArgs e)
            {
               int compt = 0;
     
               if (!Page.IsPostBack)
               {
                    foreach (Produit p in Passerelle.totalProduit())
                    {
     
                        Button bt = new Button();
                        bt.ID = "btn" + compt;
                        bt.Text = "Voir";
                        bt.CssClass = "btnVoir";
                        bt.Click += new EventHandler(valider_Click);
                        PlaceHolder1.Controls.Add(bt);
     
                        Literal Literal1 = new Literal();
                        Literal1.Text += "<div class=\"contenu\">";
                        Literal1.Text += "<table>";
                        Literal1.Text += "<tr>";
                        Literal1.Text += "<td class=\"td1\">" + Passerelle.libelleType(p.IdType) + " - " + p.Surface + "m²</td>";
                        Literal1.Text += "<td class=\"td2\">" + p.Prix + "€</td>";
                        Literal1.Text += "</tr>";
                        Literal1.Text += "</table>";
                        Literal1.Text += "<hr />";
                        Literal1.Text += "<div class=\"img1\">";
                        Literal1.Text += "<img src=\"img/img1.jpg\"/>";
                        Literal1.Text += "</div>";
                        Literal1.Text += "<div class=\"description\">";
                        Literal1.Text += "<span>" + p.Ville + " (" + p.CodePostal + ")</span>";
                        Literal1.Text += "<br />";
                        Literal1.Text += "<p>" + p.Descriptif + "</p>";
                        Literal1.Text += "</div>";
                        Literal1.Text += "<div id=\"tet\" runat=\"server\"></div>";
                        Literal1.Text += "</div>";
     
                        PlaceHolder1.Controls.Add(Literal1);
     
     
                    }
     
                }
            }
     
     
            protected void valider_Click(object sender, EventArgs e)
            {
                Session["unProduit"] = Passerelle.totalProduit()[1];
                Server.Transfer("FicheBien.aspx", true); 
            }

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut
    Mise à jour :

    j'ai changé le eventhandler par delegate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    bt.Click += delegate(object senderr, EventArgs er)
                        { valider_Click(sender, e, 0); };
    protected void valider_Click(object sender, EventArgs e, int nb)
            {
                Session["unProduit"] = Passerelle.totalProduit()[nb];
                Server.Transfer("FicheBien.aspx", true); 
            }

    j'ai mi 0, c'est à dire qu'il affichera la fiche du bien qui a pour indice 0 dans la liste des biens(le premier donc).

    quand je clique sur le bouton correspondant à un bien je suis correctement redirigé sur la page de la fiche du bien correspondant à l'indice 0.

    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
     
    protected void Page_Load(object sender, EventArgs e)
    {
               int compt = 0;
     
               if (!Page.IsPostBack)
               {
                    foreach (Produit p in Passerelle.totalProduit())
                    {
     
                        Button bt = new Button();
                        bt.ID = "btn" + compt;
                        bt.Text = "Voir";
                        bt.CssClass = "btnVoir";
                         bt.Click += delegate(object senderr, EventArgs er)
                        { valider_Click(sender, e, compt); };
                        PlaceHolder1.Controls.Add(bt);
     
                        /* tous les Literal */
     
                        compt++;
     
                    }
     
                }
            }
    }
    cependant quand je remplace le 0 par un compteur (compt) et que j'enlève le if (!Page.IsPostBack) du coup compt est égal à l'indice +1 du dernier bien de la liste.
    Ce qui est normal puisque sans le if (!Page.IsPostBack) je rentre à nouveau dans le for each et le compteur compt a cette valeur.

    Si je laisse le if (!Page.IsPostBack) je ne rentre plus dans la boucle et je ne suis pas redirigée car la fonction n'est plus appelée.
    Il faut donc que je trouve comment faire fonctionner ça avec la présence du if(!Page.isPostBack).

  3. #3
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Les contrôles créés dynamiquement doivent être recréés entre chaque postback. Tu devrais utiliser un repeater dont la datasource est Passerelle.totalProduit() dans lequel tu places ton bouton.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut
    merci pour ton aide

    Je suis par contre un peu perdu.
    Je n'ai jamais utilisé de repeater mais je crois comprendre que c'est une sorte de boucle.

    Je ne sais pas ou placer le repeater ( avant ou après le if (!Page.IsPostBack)) et comment ajouter le bouton correctement.

    Pour la DataSource j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                   Repeater1.DataSource = Passerelle.totalProduit();
                   Repeater1.DataBind();
    J'ai crée un repeater dans le html (Repeater1) mais je ne suis pas sur non plus, faut il le créer dans le code behind avec new Repeater ?

    Dois-je créer un nouveau for each
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    foreach (RepeaterItem rp in Repeater1.Items)
                   {...}
    ou bien utiliser celui existant et mettre le repeater dedans ?

    Merci

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut
    Finalement j'ai eu un flash et je me suis orienté vers une autre solution.

    Au lieu d'appeler une fonction qui me redirigera vers la bonne page au clic du bouton, j'ai tout simplement ajouté à mon bouton un postbackurl avec en paramètre l'id de mon bien.

    Je récupère alors après dans l'autre page ( la fiche du bien) l'id passé en paramètre et je peux alors affiché sa fiche en fonction de son id.

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 06/08/2006, 23h45
  2. OnClick d'un Bouton créée dynamiquement
    Par ero-sennin dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/06/2006, 13h52
  3. [VBA-W] Evénement sur bouton créé dynamiquement
    Par ptilo dans le forum VBA Word
    Réponses: 9
    Dernier message: 21/06/2006, 11h08
  4. [VCL 3] TJVLookOut : Pb ordre boutons créés dynamiquement
    Par Eric_dudu dans le forum Composants VCL
    Réponses: 1
    Dernier message: 15/12/2005, 16h17
  5. [FLASH MX2004] Rotation d'un bouton en dynamique?
    Par clad523 dans le forum Flash
    Réponses: 3
    Dernier message: 09/08/2004, 12h30

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