Linkbutton dynamique & postback [Résolu]

Signaler
Messages postés
4
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
3 octobre 2006
-
EmacLi
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Statut
Membre
Dernière intervention
1 février 2013
-
bonjour,

j'ai un petit soucis avec mes linkbutton créés dynamiquement, lors du click , la page se recharge et la méthode que j'ai associée au linkbutton dynamique ne s'effectue pas... alors qu'en testant avec un linkbutton static, tout marche correctement.

Comment peut-on bloquer le postback ou la redirection auto du linkbutton dynamique .

j'explique ce que je veux faire : 
je récupère une image générée dynamiquement  que j'affiche dans ma page, 
un lien sur cette image  permet le téléchargement de l'image (par ma methode qui force le téléchargement de l'image plutot que de l'afficher dans le navigateur)

 un peu de code pour mieux comprendre ?

LinkButton

tmp_lkButton = newLinkButton();
tmp_lkButton.ID ="tmp_lkButton"+ i.ToString ();
tmp_lkButton.CausesValidation = false;
tmp_lkButton.Text = "t‚l‚charger ce graphique";
tmp_lkButton.Enabled = true;
tmp_lkButton.EnableTheming =
true;
tmp_lkButton.EnableViewState = true;
tmp_lkButton.Click += new System.EventHandler(this.tmp_lkButton_Click);
tmp_lkButton.Attributes.Add(tmp_lkButton.ID, "../test_Stats/TMP_IMG/" + mesStat.ColStat[i].Name + typeGraph.ToString() + typ + legende + ".png");
//juste pour récupérer l'url de l'image
Panel2.Controls.Add(tmp_lkButton);
Panel2.EnableViewState = true ;

//voilà pour la création du bouton

protected
void tmp_lkButton_Click(
object sender,
EventArgs e){

// LinkButton a = (LinkButton)sender;

//DownloadFile(a.Attributes[a.ID], true);DownloadFile(

"./images/logo.jpg",
true);

}

si quelqu'un voit une solution, j'ai regardé les post à ce sujet et pas de réponse que je puisse envisager comme solution...

merci

6 réponses

Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
17
Tu as l'evenement Load de la page ou tu met la majorité du code mais tu as pleins d'autres evenement notammeent l'evenement init

protected void Page_Init(Object sender, EventArgs e)
{

 //Ajout du controle ici
this.Controls.Add(lecontrol);

}

<hr />Cyril - MVS - MCP
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
17
Bonjour,

Tout controle doit être présent dans la collection de controls avant le page_load il faut donc rajouter tous les controles dans le page_init, sinon ils ne vont pas pouvoir déclencher d'evenement.

<hr />Cyril - MVS - MCP
Messages postés
4
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
3 octobre 2006

merci pour cette réponse rapide


je vais tester ça alors même si je n'ai qu'une vague idée de ce qu'est le page_init...


et merci aussi pour tous tes codes sur les créations en dynamique, même si ils sont en VB ça m'a bien dépanné aujourd'hui


David


 


 
Messages postés
4
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
3 octobre 2006

oui c'est vrai j'ai fait un tour sur le msdn, ça offre pas mal de possibilités (heureusement quelques réminiscences de java me reviennent) tu m'as aiguillé sur la bonne voie, je vais chercher un peu et je posterai la réponse d'ici peu j'espère
Messages postés
4
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
3 octobre 2006

voilà une version simplifiée de ce que j'obtiens ( je ne met pas les boucles qui servent à définir combien de bouton avoir et leurs attributs)

pour le init

protected

void Page_Init(Object sender, EventArgs e)

{

//Ajout du controle ici

tmp_lkButton = newLinkButton();

tmp_lkButton.Text = "tmplink";

tmp_lkButton.EnableTheming = true; //si on a besoin de ces options les placer ici, dans le init

tmp_lkButton.EnableViewState = true;//si on a besoin de ces options les placer ici, dans le init

tmp_lkButton .Click+=newEventHandler(tmp_lkButton_Click);

this.Panel2.Controls.Add(this.tmp_lkButton);

}

pour le eventHandler

protectedvoid tmp_lkButton_Click(object sender, EventArgs e)

{

DownloadFile("./images/logo.jpg", true);//m‚thode issue de cs

}

et la methode download

privatevoid DownloadFile(string fname, bool forceDownload)

{

string path = MapPath(fname);

string name = Path.GetFileName(path);

string ext = Path.GetExtension(path);

string type = "";

// set known types based on file extension

if (ext != null)

{

switch (ext.ToLower())

{

case".png": type = "image/png";

break;

case".jpg": type = "image/jpeg";

break;

}

}

if (forceDownload)

{

Response.AppendHeader("content-disposition",

"attachment; filename=" + name);

}

if (type != "")

Response.ContentType = type;

Response.WriteFile(path);

Response.End();

}

en esperant que ça dépannera quelqu'un

encore merci Cyril
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Statut
Membre
Dernière intervention
1 février 2013
1
Et dans le cas ou le déclenchement de l'évenement devait lui apporté une information lui servant à non plus affiché non plus un LinkButton mais un Label (ex: ).

Comme l'initialisation a déjà été faite, comme devrait il s'y prendre pour initialiser son Label ?

Merci d'avance.