2009-01-13 5 views
0

J'ai une table dynamique créée et dans certaines cellules j'ai un bouton d'image associée au gestionnaire redBall_Click()ImageClickEvenHandler ne remet pas gestionnaire

(voici le code derrière)

TableCell cellOK = new TableCell(); 
    cellOK.Style.Add(HtmlTextWriterStyle.TextAlign, "Center"); 
    cellOK.Width = new Unit("3%"); 
    ImageButton redBall = new ImageButton(); 
    redBall.CausesValidation = false; 
    redBall.ID = id; 
    redBall.ImageUrl = "~/App_Themes/DotRed.png"; 

    redBall.Click += new ImageClickEventHandler(redBall_Click); 
    cellOK.Controls.Add(redBall); 

Mon problème est que la méthode redBall_Click() n'est jamais appelée (ni après le PostBack)

Comment puis-je résoudre ce problème?

P.S. : Je ne peux pas utiliser un lien statique car chaque ImageButton est associé à un ID spécifique que je dois passer à la page que j'appelle (par exemple en tant qu'objet Session)

Répondre

0

J'ai finalement pris la résolution (juste hier).

Je suppose que je construisais mes boutons trop tard: dans le Page_PreRender (après l'événement devait être déclenché) peut-être si je mets la création dans Page_Load (oui, je crée tout aussi sur PostBack) il gérerait le clic, mais je pense que je ne vais pas essayer depuis que j'ai trouvé une solution de contournement.

Je vais vous expliquer pour tous ceux qui pourraient avoir le même problème:

private TableCell cellOK(string id) 
{ 
    TableCell cellOK = new TableCell(); 
    cellOK.Style.Add(HtmlTextWriterStyle.TextAlign, "Center"); 
    Image redBall = new Image(); 
    redBall.ID = id; // useless 
    redBall.ImageUrl = "redball.gif"; 
    HyperLink hl = new HyperLink(); 
    hl.Controls.Add(redBall); 
    hl.NavigateUrl = MyPage + "?id=" + id; 
    cellOK.Controls.Add(hl); 
    return cellOK; 
} 

et Page_Init()

string m_QueryStringId = Request.QueryString.Get("id"); 
if (!string.IsNullOrEmpty(m_QueryStringId)) 
{ 
    // Do something 
} 
0

Avez-vous essayé d'insérer un point d'arrêt dans la méthode de chargement de page avant de cliquer sur l'image? Je soupçonne que cela peut montrer que la publication est en cours, même si le gestionnaire de clic d'image ne se fait pas virer.

Le code permettant de créer le bouton d'image est-il également appelé lors d'une publication? Si ce n'est pas le cas, la page sera publiée, mais le bouton d'image n'existera pas pour appeler le gestionnaire de clic. Ça a l'air bizarre, mais ça m'a rattrapé plusieurs fois.

1

Vous devez configurer le gestionnaire d'événements dans OnInt et le faire à chaque fois que la page est créée, même pendant une publication. Assurez-vous de ne pas avez le code dans un bloc comme:

if(!this.IsPostback) 
{ 
    ... 
} 
Questions connexes