W mojej witrynie webowej Asp.net mam formularz, w którym użytkownicy wybierają różne opcje, a te opcje są odsyłane w odświeżeniu, które generuje plik PDF raport i wysyła ten plik z powrotem do użytkownika do pobrania za pomocą następującego kodu:Jak zapobiegać naciśnięciu przycisku, dopóki żądanie formularza nie zostanie wypełnione, gdy żądanie formularza spowoduje pobranie pliku
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();
}
problemem jest to raport może potrwać dobre 10 lub tak sekund, aby wygenerować ze względu na ilość danych i przetwarzania wymagane, ale nie chcę, aby ludzie byli niecierpliwi i ciągle klikają przycisk.
Na normalnej stronie dodałbym javascript, aby wyłączyć przyciski po kliknięciu. Działa to, ponieważ po zakończeniu odświeżania serwera serwer wraca z przyciskami formularzy ponownie włączonymi. Jednak ponieważ odpowiedź formularza nie jest stroną HTML, ale pobranym plikiem, którego nie potrafię wykryć.
Zasadniczo, w jaki sposób wyłączyć przyciski formularza, ale ponownie włączyć je, gdy otrzymamy odpowiedź z serwera (i rozpocznie się transfer pliku http)?
prevously poprosił http://stackoverflow.com/questions/6137172/how-do-i-prevent-users-clicking-a-button-twice – David
myButton.Enabled = false? – LightStriker
To pytanie odpowiada tylko połowie mojego problemu i nie odpowiada, w jaki sposób ponownie włączyć przycisk. Również myButton.Enabled nie działa, ponieważ odpowiedź Asp.Net nie powoduje ponownego renderowania kodu HTML, ponieważ właśnie zwraca zawartość pliku – KallDrexx