В моем приложении ASP.Net у меня есть требование, чтобы, когда пользователь нажимает на элемент пользовательского интерфейса, мы генерируем для него PDF-файл, который они могут загрузить. В настоящее время это реализовано путем отправки формы на страницу ashx. Эта страница, по сути, проверяет форму, а затем выполняет правильную страницу на стороне сервера, что приводит либо к HTML, либо к PDF-документу этих страниц HTML.
На клиенте я заранее знаю, собираемся ли мы получить PDF или HTML, когда это HTML, я открываю новое окно и перенаправляю сообщение формы в это окно, и все работает хорошо. Когда это PDF-файл, я не меняю цель формы, и она остается на текущей странице.
Это работает, пользователю предоставляется диалоговое окно сохранения, а текущая страница не изменяется и не теряется.
У меня проблема в том, что создание PDF-файла занимает от 1 до 15 секунд. Я хочу открыть диалоговое окно, подождите. Отображение всплывающего окна будет простым, но я не уверен, как мне узнать, чтобы закрыть всплывающее окно? Всплывающее окно будет div на текущей странице.





просто установите JavaScript на стороне клиента и позвольте ему показывать анимированный GIF в течение 1-15 секунд (на ваш выбор) и закрываться по истечении назначенного времени.
Во всплывающем окне может быть таймер на стороне клиента, который опрашивает сервер на предмет завершения задачи. Долгосрочная задача сервера должна обновлять ход выполнения в таблице базы данных или в объекте кэша сервера, к которому может получить доступ служба опроса.
Пара старых статей из журнала MSDN. Вы должны иметь возможность использовать те же концепции с новыми библиотеками, такими как asp.net Ajax.
Отчетность о ходе выполнения задачи с помощью ASP.NET 2.0
Упростите выполнение задачи с помощью ASP.NET «Атлас»
Это, вероятно, лучший вариант, поскольку задача не такая уж и долгая, мне не понравилась идея, что пользователь сохраняет файл, а затем вижу, что всплывающее окно все еще существует. Уловка заключается в том, что является хорошим значением интервала. Я должен был бы измерять влияние doign this каждые пару секунд. Спасибо
Вы сказали:
When its a PDF I don't change the target for the form and it remains on the current page.
В этом случае исходная страница исчезнет при открытии PDF-файла. В этой ситуации я бы загрузил анимированный gif и открыл его с помощью Javascript в теге div, перекрывающем остальную часть страницы. Вам не нужно закрывать его, поэтому таймер или опрос не требуются. Он просто исчезнет, когда исчезнет страница.
На самом деле страница не меняется, даже если они ее открывают. Я ожидал описанного вами поведения, но он работает в IE6, 7 и Firefox и в настоящее время находится в разработке.
Предложение Гулзар было правильным. У меня есть простая служба wcf с поддержкой ajax, которая проверяет переменную сеанса. Моя страница ashx устанавливает для переменной значение false, когда она начинает обработку, и затем true, когда это делается.
Я думаю, что может возникнуть состояние гонки, если клиент проверит, прежде чем мы установим для элемента сеанса значение false; однако есть способы обойти это, если мы изменим службу, чтобы установить для элемента сеанса значение false после того, как клиент получит ответ im done.
Уловки по-прежнему заключаются в том, чтобы выяснить, какой интервал у клиента должен быть. Если мы установим его на низкий уровень, пользователь сможет сохранить файл, а затем увидеть сообщение, которое все еще обрабатывается. Я обсуждаю себя от полсекунды до секунды. Все, что меньше полсекунды, кажется небезопасным.
Другой вопрос: возможно ли использование методов ajax, чтобы браузер видел тип контента и правильно его обрабатывал?