Perte de l'évènement de mon ImageButton si clic sur Précédent

Signaler
Messages postés
2
Date d'inscription
jeudi 5 juin 2008
Statut
Membre
Dernière intervention
30 septembre 2010
-
ravage117
Messages postés
2
Date d'inscription
jeudi 5 juin 2008
Statut
Membre
Dernière intervention
30 septembre 2010
-
Bonjour,

J'ai une page qui se déroule en 3 étapes.
La 1ere, le client choisi son entrée parmi la liste des entrées, la 2eme son plat et enfin la 3eme son dessert.
Pour gérer ces 3 étapes, je crée plusieurs ImageButton correspondant à mes produits de ma 1ere étape dynamiquement depuis mon code C# à qui je lui lie un ID, une imageURL et un évènement (commun à tous). Et enfin je lie mon Imagebutton à mon panel
monPanel.Controls.Clear();
foreach (Produits prod in lstProduit)
{
    ImageButton imgBtn = new ImageButton();
    imgBtn.ID = prod.idProduit;
    imgBtn.ImageUrl = urlFamImage;
    imgBtn.ToolTip = prod.nom;
    imgBtn.Click += new ImageClickEventHandler(imgBtn_Click);

    monPanel.Controls.Add(imgBtn);
}


et dans mon évènement imgBtn_Click(), je récupère l'ID de mon ImageButton pour faire tout mon traitement et je termine par repeindre complétement ma page dynamiquement (dont les ImageButton) en passant à l'étape suivante (numéro d'étape passé en variable session).

Jusqu'ici tout marche nikel.

Cependant, si l'utilisateur se trouve à l'étape 2 ou 3 et clic sur le bouton Précédent du navigateur, le navigateur me réaffiche ma page comme elle était à l'étape précédente, seulement mes ImageButton on perdu leurs évènements! Et du coup, si l'utilisateur clic dessus, on va repasser dans le page_load mais pas dans son évènement et ca va me faire n'importe quoi.

J'ai remarqué que les ImageButton créé en dur dans le .aspx ne perdent pas leurs évènements en cas de clic sur le bouton Précédent du navigateur
ex:


Mais je suis obligé de les créer dynamiquement dans mon cas.

Si quelqu'un sait comment faire garder l'évènement à mon ImageButton, ou empêcher l'utilisateur de cliquer sur le bouton Précédent sans javascript loufoque (car destiné aux entreprise qui désactivent le javascript de leurs navigateurs!)...

Merci d'avance

2 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
18
Bonjour,

Comme je le repete souvent, les controles dynamiques sont la premiere cause de problème avec ASP.net. Dans ce cas, je pense que l'utilisation d'un listview/repeater permet de contourner le problème.


  
    " CommandName="DoPouet" />
  



  void BindData()
  {
     this.rptPouet.DataSource = products; 
     this.rptPouet.DataBind(); 
  }

  protected void rptPouet_ItemCommand(Object sender, RepeaterItemCommand e)
  {
     // ...
  }

____________________________________________
Cyril - MVP ASP.net - webSite
Messages postés
2
Date d'inscription
jeudi 5 juin 2008
Statut
Membre
Dernière intervention
30 septembre 2010

Merci pour le tuyau.

J'ai résolu mon problème autrement mais je garde ta solution sous le coude.

Perso pour chaque page, je stock mon numéro d'étape dans une variable de session et également dans un textbox caché.
Si un utilisateur clic sur précédent, ma variable de session reste la même, alors que la valeur du textbox revient à l'état précédent.
Du coup si l'utilisateur clic de nouveau sur un ImageButton depuis une page précédente, j'effectue une comparaison entre ma variable de session et mon textbox dans la page_load. Si ceux-ci sont différent, j'effectue les modifications nécessaires. Tout fonctionne comme ca.

Encore merci