Domanda

Scrivo un ImageButton a una cella in una nuova riga quando un utente seleziona un elemento in un elenco:

ImageButton imgbtnRemove = new ImageButton();
imgbtnRemove.ID = "uxStandardLetterDeleteImage_" + items.letterName;
imgbtnRemove.CommandName = "uxStandardLetterDeleteImage_" + items.letterName;
imgbtnRemove.ImageUrl = items.remove;
imgStatus.AlternateText = "Remove";
tRow.Cells[3].Controls.Add(imgbtnRemove);

Quando la nuova ImageButton si fa clic, io non riesco a ottenere un handle ad esso. Lo vedo nei evento Page_PreRender, dove ho anche ricaricare la tabella su ogni postback.

string returnData = Request.Form.ToString();

, ma scorrendo il modulo controlla le immagini:

if (c is System.Web.UI.WebControls.Button ||
c is System.Web.UI.WebControls.ImageButton)

non lo trova. Posso trovarlo se metto manualmente in una:

imgbtnRemove.Click += new System.Web.UI.ImageClickEventHandler(this.ButtonClick);

nel Page_Load e poi afferrarlo nell'evento click:

switch (((System.Web.UI.WebControls.ImageButton)sender).CommandName)
...

ma perché ci sono nuove righe vengono aggiunti ed eliminati, questo diventa piuttosto brutto a livello di codice. Sto pensando ci deve essere una soluzione elegante per la creazione ImageButton dinamica e il recupero al volo dal codice lato server. Ho fatto un sacco di scavare ma questo mi sta stumping.

Grazie in anticipo ...

È stato utile?

Soluzione

Se si sta creando controlli dinamici durante la gestione degli eventi fase del ciclo di vita pagina (ad esempio, nella voce evento selezionato), allora il controllo sarà andato sul prossimo postback.

Al fine di controlli dinamici di essere registrati ViewState, devono essere creati nella fase di inizializzazione del ciclo di vita dell'evento.

Inoltre, dici che stai scorrendo i controlli della maschera ... quando si aggiungono l'ImageButton alle celle della tabella. Stai ricorsivamente scendendo la gerarchia di controllo per cercare l'ImageButton?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top