Разблокировать (jQuery BlockUI) после отправки файла в браузер через поток ответов

У меня есть <asp:button />, который создает отчет в формате PDF. Я хочу использовать jQuery BlockUI для отображения сообщения: Генерация отчета..

Используя: Response.BinaryWrite Затем я отправляю файл пользователю, чтобы он отображался как загружаемый файл в браузере.

Я не могу заставить $.unblockUI(); стрелять. Как только загрузка файла начнется, завершится или будет отменена, я хочу, чтобы он исчез. В настоящее время этого никогда не происходит.. Как будто страница не была перезагружена, я попал на сервер, но он возвращается с той же страницей.

Что я пробовал:

  • Установка переменной в JS в значение true, чтобы document.ready() она вызывала функцию, если установлено значение true. Это не работает, потому что даже если я изменяю переменную в коде, это не меняет HTML, отправляемый клиенту.
  • Такого рода вещи: Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function() { $.unblockUI; }); //register with Microsoft way $(document).ajaxStop($.unblockUI); //double the insurance and register with jquery way никогда не звонят..

Можно ли этого добиться с помощью панели обновлений?

Какие-нибудь мысли?

Также, если это поможет:

Response.AddHeader("Content-Disposition", "attachment;filename=""" & ShortFilename & """")
        Response.AddHeader("Content-Length", byteArray.Length)
        Response.BinaryWrite(byteArray)
        Response.Flush()
        Response.End()

Я понимаю, почему это не работает, страница в любом случае не обновляется, в браузер отправляется только поток ответов, но, конечно же, есть событие, за которое я могу зацепиться?


person Markive    schedule 21.07.2010    source источник
comment
Вы нашли решение этой проблемы?   -  person    schedule 05.08.2011
comment
Фактически невозможно сделать это так, как я изначально планировал, поскольку возврат потока не перезагружает страницу и не позволяет вам передать какую-либо пользовательскую логику.   -  person Markive    schedule 08.08.2011
comment
Решение состоит в том, чтобы выполнить всю обработку с отображением экрана загрузки, а затем либо вернуть ответ, который удалит BlockUI, а затем запросит файл, который вы хотите транслировать, либо перенаправить их на страницу, которая повторно запросит поток. Однако для этого необходимо временно сохранить файл на жестком диске.   -  person Markive    schedule 08.08.2011


Ответы (2)


Идея может состоять в том, чтобы создать дочернее окно, которое выполняет загрузку PDF, и позволить родителю выяснить, когда дочернее окно закрылось или что-то в этом роде.

Возможно ли родительское окно, чтобы узнать, было ли закрыто дочернее окно?

person Dave Walker    schedule 26.09.2011

Решение состоит в том, чтобы сначала заблокировать пользовательский интерфейс как обычно. Затем сделайте запрос AJAX к своему генератору отчетов, когда PDF-файл будет создан, сохраните его локально на короткое время или сохраните его во временной папке, которая очищается, когда пользователь выходит из системы или время их входа в систему истекает. Попросите генератор отчетов вернуть сообщение об успешном завершении и URL-адрес.

Попросите клиентский ajax-запрос обработать сообщение об успешном завершении, удалить BlockUI, а затем вызвать URL-адрес, используя:

window.location="http://yourURL/temp/report.pdf

Браузер начнет загружать файл, и все готово!

https://stackoverflow.com/a/7660817/181197

person Markive    schedule 24.05.2013