Linkbutton in Gridview Postback Updatepanel

giovedì 18 ottobre 2012 - 18.51

Nicola Profilo | Senior Member

Ho un linkbutton dentro un gridview...
per lo scarico di un file pdf...

se quel linkbutton lo metto esterno all'update panel e al gridview funziona...

se lo metto dentro l'update panel non funziona...

cè un modo per impostare un controlid (del linkbutton) all'interno di un gridview in modo che funzioni come esterno all'updatepanel..
con i triggers ?? o qualcosa... perchè tale button ha bisogno del postback...

GRAZIEEE
Nicola

andrestu Profilo | Expert

devi registrarlo come controllo che effettua il postback, lo cerchi nell'evento item_created del gridview e facendo riferimento allo script manager cè un metodo che prende come parametro un controllo per registrarlo appunto come controllo che effettua il postback. se non ricordo male registerpostback... o qualcosa di simile.
Anche io ho risolto così, sarebbe comunque interessante capire se si può far partire in qualche modo il download anche all'interno di un UpdatePanel, se cè qualcuno in ascolto che lo sa fare ...

Andrea Restucci - Web Developer

Gluck74 Profilo | Guru

ciao,
dovendo scaricare il file pdf, la chiamata non può essere asincrona. Dovresti quindi impostare questo bottone come trigger sincrono del panel.
La cosa difficile è che il bottone sta dentro una griglia. Se mettessi un semplicissimo asp:PostBackTrigger, avrei questo errore:

A control with ID 'btndown' could not be found for the trigger in UpdatePanel 'UpdatePanel1'.

Questo perché la griglia si comporta come una "scatola chiusa" e non espone i controlli dichiarati per le righe (e ci aggiungo un "giustamente"!)
Allora dobbiamo farlo noi a mano quando la griglia costruisce i controlli delle righe, ovvero nell'evento OnRowCreated della griglia.
Ecco il codice:
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { Button btn = e.Row.FindControl("btndown") as Button; if (btn != null) { ScriptManager.GetCurrent(this).RegisterPostBackControl(btn); } }


ciau

____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

totti240282 Profilo | Guru

Se non sbaglio possiamo anche dire a quel controllo di fare un Postback completo.
C'è solo un capitano !!!!!!

Gluck74 Profilo | Guru

scusa, mentre scrivevo avevi già risposto.....

>Anche io ho risolto così, sarebbe comunque interessante capire
>se si può far partire in qualche modo il download anche all'interno
>di un UpdatePanel, se cè qualcuno in ascolto che lo sa fare ...

No, non credo proprio si possa fare. Per come funziona un update panel non puoi.
Qui di seguito un esempio response ritornata da un asyncPostback:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Come puoi vedere, viene spedito indietro tutto il contenuto del panel, più un sacco di info che servono per ripristinare lo stato della pagina, aggiornare il panel giusto ecc ecc.....
Tutto questo meccanismo è automatico, e non potresti nemmeno mettere il contenuto di un file dentro un panel. Ci vorrebbe una massiccia personalizzazione, oppure un tuo controllo updatepanel personalizzato che ti permette di modificare il meccanismo.

Una possibile soluzione potrebbe essere questa:
http://kdelchev.com/2012/07/send-file-download-ajax/
____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

andrestu Profilo | Expert

ok grazie prendo nota quando avrò qualche minuto faccio due tentativi anche se in effetti far fare il postback completo ad un puldante solo per il download non è poi la fine del mondo, per il momento si può lasciare tranquillamente così...

Andrea Restucci - Web Developer
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5