Как я могу изменить страницу после завершения загрузки файла в браузер? - PullRequest
4 голосов
/ 19 декабря 2009

У меня есть простое приложение на C # ASP.NET, которое генерирует файл Excel и отправляет его в браузер с помощью функции Response.WriteFile ().

Я хотел бы отключить кнопку отправки после ее нажатия и отобразить сообщение на экране, чтобы подождать несколько минут, поскольку генерация некоторых файлов может занять некоторое время. Это прекрасно работает, но я не могу понять, как повторно активировать кнопку или даже обновить страницу после завершения загрузки файла. Страница остается отключенной, «Пожалуйста, подождите ...», даже когда она закончена.

Я думал, что синхронный AJAX-вызов с дополнительными командами javascript впоследствии сработает, но, хотя файл генерируется, он никогда не отправляется в браузер. Я также пытался использовать элемент управления iframe, но не могу найти надежного способа узнать, когда в него завершается загрузка нового файла.

Заранее спасибо всем, кто может помочь!

ОБНОВЛЕНИЕ: я нашел возможное решение в http://code.msdn.microsoft.com/AjaxFileDownload, которое отлично подходит для загрузки файлов, которые уже существуют, но когда я вызываю страницу, которая генерирует файл и завершается с Response.End (), "Законченная загрузка «событие никогда не срабатывает.

Ответы [ 3 ]

4 голосов
/ 19 декабря 2009

Я бы сделал так, чтобы страница генерировала токен и отправляла указанный токен на сервер вместе с запросом на создание файла excel.

Когда сервер получает токен, он помещает его в таблицу в вашей базе данных, и, как только файл закончится, он удаляет токен.

Теперь, когда все это происходит, на странице есть процесс, который регулярно (смотрит на JS Timers) запрашивает сервер (асинхронные вызовы), существует ли токен в базе данных. когда сервер, наконец, сообщает странице «нет», вы знаете, что можете снова включить страницу и скрыть сообщение «Пожалуйста, подождите ...».

1 голос
/ 26 января 2010

ОБНОВЛЕНИЕ: я нашел возможное решение в http://code.msdn.microsoft.com/AjaxFileDownload, которое отлично подходит для загрузки файлов, которые уже существуют, но когда я вызываю страницу, которая генерирует файл и заканчивает откликать. Событие «Законченная загрузка» никогда не срабатывает.

Не поддерживается потоковая загрузка. Вам нужно создать временный файл и отправить временный файл в браузер, надеюсь, это поможет в обработке сгенерированных файлов. Событие окончания загрузки будет запущено только тогда, когда в браузере доступно значение cookie.

Спасибо

Raj

0 голосов
/ 19 декабря 2009

Я бы, вероятно, превратил ваш код, который генерирует и возвращает файл в веб-сервис, и использовал бы jjery или библиотеку ajax asp.net для выполнения вызова ... с jquery это выглядело бы примерно так:

//open your dialog box here

тогда

$.ajax({
   type: "POST",
   url: "yourwebservice.asmx",
   data: "yourdata",
   success: function(){
     //close your dialog box
   }
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...