Ajax i download file

descarga

Amb .Net utilitzar Ajax és super senzill, tant sols hem de col·locar un control UpdatePanel i tota la resta és el mateix.

Però hi ha un cas que no deixa de ser curiós. Quan un postback retorna una cadena binaria que representa un fitxer els UpdatePanels fan que no funcioni adequadament. Normal, hem de tenir present que els UpdatePanel serveixen perquè el contingut del seu interior s’actualitzi i no pas per descarregar fitxers. Hi hi algunes tècniques que ho poden fer però no deixa de ser alternatives sobre les eines que disposes.

Una de les maneres més senzilles és dir-l’hi a l’UpdatePanel que al accionar el botó de descarrega executi un Postback enlloc de un AsyncPostback. Per això té el triggers, per assignar controls de la pàgina per tal de que provoquin un postback complet de la pàgina.

Però en el cas de tenir un ListView o qualsevol altre control que encapsuli controls la unica manera és fer-ho des de codi. Però els update panels no els hi agrada massa que els hi toquis els triggers per codi. Que no et fa cas vaja.

Llavors ens queda una opció que per mi és molt fina i neta. Utilitzar ScriptManager per indicar que l’event click del botó es fagi per Postback i no pas per AsyncPostback
ScriptManager.GetCurrent(this.Page).RegisterPostBackControl(this.lnkDownload);

Posa aquest tros de codi en l’event DataBound del teu control ListView. Fàcil i funciona.

 

Més informació:

Download feature not working within update panel in asp.net

Simple way to do File download with UpdatePanel and overlay ProgressIndicator

 

Advertisements

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s