Nel mio sito Web di Asp.net ho un modulo in cui gli utenti selezionano varie opzioni e tali opzioni vengono reinviate in un postback che genera un PDF report e invia il file indietro per l'utente per il download tramite il seguente codice:Come evitare di premere il pulsante fino a quando la richiesta di modulo non viene completata quando la richiesta di modulo causa il download di un file
protected void btnTopGenReport_Click(object sender, EventArgs e)
{
var stream = new PodMainReportGenerator().GenerateReport(GetReportParameters());
var bytes = stream.ToArray();
stream.Close();
// Set the content headers
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=testReport.pdf");
Response.AddHeader("Content-Length", bytes.Length.ToString());
Response.BinaryWrite(bytes);
Response.End();
}
il problema è questo rapporto può prendere un buon 10 secondi circa per generare a causa della quantità di dati e di elaborazione necessaria, ma io non voglio che le persone diventino impazienti e facciano clic ripetutamente sul pulsante.
In una pagina normale aggiungerei javascript per disabilitare i pulsanti al clic. Funziona perché quando il postback è completo il server ritorna con i pulsanti del modulo riabilitati. Tuttavia, poiché la risposta del modulo non è una pagina HTML ma un file scaricato, che non so come rilevare.
In sostanza, come disattivare i pulsanti del modulo ma riattivarli una volta ottenuta la risposta dal server (e il trasferimento del file http è avviato)?
prevously chiesto http://stackoverflow.com/questions/6137172/how-do-i-prevent-users-clicking-a-button-twice – David
myButton.Enabled = false? – LightStriker
Questa domanda risponde solo a metà del mio problema e non risponde come riattivare il pulsante. Anche myButton.Enabled non funzionerà perché la risposta di Asp.Net non è re-rendering dell'HT dal momento che sta solo restituendo il contenuto del file – KallDrexx