Подождите, диалог и загрузка файлов на asp.net

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

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

Это работает, пользователю предоставляется диалоговое окно сохранения, а текущая страница не изменяется и не теряется.

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

Другой вопрос: возможно ли использование методов ajax, чтобы браузер видел тип контента и правильно его обрабатывал?

JoshBerke 08.10.2008 19:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
1
2 975
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

просто установите JavaScript на стороне клиента и позвольте ему показывать анимированный GIF в течение 1-15 секунд (на ваш выбор) и закрываться по истечении назначенного времени.

Ответ принят как подходящий

Во всплывающем окне может быть таймер на стороне клиента, который опрашивает сервер на предмет завершения задачи. Долгосрочная задача сервера должна обновлять ход выполнения в таблице базы данных или в объекте кэша сервера, к которому может получить доступ служба опроса.

Пара старых статей из журнала MSDN. Вы должны иметь возможность использовать те же концепции с новыми библиотеками, такими как asp.net Ajax.

Отчетность о ходе выполнения задачи с помощью ASP.NET 2.0

Упростите выполнение задачи с помощью ASP.NET «Атлас»

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

JoshBerke 08.10.2008 19:27

Вы сказали:

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 и в настоящее время находится в разработке.

JoshBerke 08.10.2008 19:16

Предложение Гулзар было правильным. У меня есть простая служба wcf с поддержкой ajax, которая проверяет переменную сеанса. Моя страница ashx устанавливает для переменной значение false, когда она начинает обработку, и затем true, когда это делается.

Я думаю, что может возникнуть состояние гонки, если клиент проверит, прежде чем мы установим для элемента сеанса значение false; однако есть способы обойти это, если мы изменим службу, чтобы установить для элемента сеанса значение false после того, как клиент получит ответ im done.

Уловки по-прежнему заключаются в том, чтобы выяснить, какой интервал у клиента должен быть. Если мы установим его на низкий уровень, пользователь сможет сохранить файл, а затем увидеть сообщение, которое все еще обрабатывается. Я обсуждаю себя от полсекунды до секунды. Все, что меньше полсекунды, кажется небезопасным.

Другие вопросы по теме