Problemi con Page.Response

martedì 16 gennaio 2007 - 16.50

liuc Profilo | Junior Member

Ciao,
per la mia applicazione web ho bisogno di esportare dei dati in formato Excel; per l'esportazione ho creato una classe con un metodo che restitusce un flusso xml al client tramite istruzioni del tipo Response.Write(). (inizialmente il contenttye è impostato a "application/ms-excel"). La procedura funziona correttamente ma ora mi si pone un problema pratico :

Dal form principale , cliccando sul pulsante di esportazione, si apre una finestra di popup nella quale l'utente seleziona alcuni parametri e quindi avvia l'esportazione.
Vorrei che al termine dell'esportazione automaticamente la finestra di popup si chiudesse. Per chiudere la finestra utilizzo l'istruzione
Respone.Write("<SCRIPT>window.close;</SCRIPT>")
che funziona benissimo da sola, ma richiamata successivamente alla procedura di esportazione ha l'effetto di aggiungere il testo al file xml che mi definisce il file Excel.
La mia procedura di esportazione termina richiamando l'istruzione Response.Flush().
Al ritorno provando a chiudere la finestra con l'istruzione precedente mi si verifica il problema che ho menzionato.
Non posso terminare la procedura con Response.End perchè automaticamente tutto il testo successivo verrebbe ignorato... e allora come posso fare?
Se provo a scrivere queste istruzioni al ritorno dalla procedura di esportazione :

Response.ContentType="text/html"
Respone.Write("<SCRIPT>window.close;</SCRIPT>")
Response.End()

il file Excel è formattato correttamenet (lo script non è inserito nel flusso) ma
comunque la pagina non viene chiusa.

Come posso fare?
spero di essere stato chiaro :-)

Brainkiller Profilo | Guru

>Ciao,
>per la mia applicazione web ho bisogno di esportare dei dati
>in formato Excel; per l'esportazione ho creato una classe con
>un metodo che restitusce un flusso xml al client tramite istruzioni
>del tipo Response.Write(). (inizialmente il contenttye è impostato
>a "application/ms-excel"). La procedura funziona correttamente
>ma ora mi si pone un problema pratico

Bel problemino originale. Non mi è mai capitato di fare questa operazione, intendo con chiusura di finestra. Io ti suggerirei magari di sfruttare AJAX se sei capace (è abbastanza banale in questo caso) e risolvere due problemi in uno. Il primo di non usare Popup spesso bloccati dai Popup Blocker, il secondo di rendere più intuitivo il tutto. Io farei così.

Nella pagina principale dove clicchi per aprire il popup, metterei le opzioni di creazione del file Excel. Poi metti un bel button collegato a una function Javascript che tramite XMLHTTP fa una GET della pagina che produce il file di Excel passandogli tutti i parametri scelti. Quella pagina non fa una Response.Write all'utente, ma scrive il file su disco (del server). A quel punto alla fine della GET (visto che la chiamata è sincrona) il controllo ritorna al Javascript. A quel punto puoi modificare sempre da Javascript un link dentro la pagina HTML facendolo puntare al file Excel appena creato e mettendo come label "Il file è stato creato. Scaricalo ora!".

Spero di essere stato chiaro. Un po' più complessa da realizzare dell'altra ma secondo me molto più potente, flessibile e carina.
david
David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5