Отображать сообщение о загрузке при экспорте набора результатов в Excel

StackOverflow https://stackoverflow.com/questions/520987

Вопрос

Я использую ASP.NET и C # и экспортирую очень большой набор результатов в Excel.Пока мой код экспорта запущен, я хотел бы показать "загружающийся" анимированный gif-файл, чтобы пользователи знали, что их запрос обрабатывается.Я пытался сделать это с помощью многопоточности, но я не очень хорошо знаком с этим.Кто-нибудь может направить меня в правильном направлении?Спасибо!

Джон

Это было полезно?

Решение

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

Не зная больше о вашей реальной настройке, я не могу больше помочь, но в прошлый раз, когда я реализовывал это, я сделал что-то в этом роде:

Предположим, у нас есть div с именем PrintLoadingPanel с помощью JQUERY я настраиваю div на отображение и переношу окно:

    $("#printLoadingPanel")
       .css({display:"block",top:"0px",left:"0px",height:screen.availHeight});

Затем я запущу таймер с интервалом в 1/2 секунды, который начнет проверять, закончили ли мы печать.Я только создаю и загружаю небольшие PDF-файлы, поэтому мне нужен был более быстрый ответ.Если ваш отчет действительно медленный, вы можете захотеть изменить это:

    window.setTimeout(checkIfDoneDownload,500);

Затем моя функция CheckIfDoneDownload обращается к серверу и проверяет, завершили ли мы генерацию файла и загрузили ли его.Здесь я снова использую JQUERY для вызова службы WCF с поддержкой AJAX.Вы могли бы заменить это с помощью PageMethods или любым другим способом обратного вызова сервера.

function checkIfDoneDownload()
{

$.ajax({
  type: "POST",
  url: "../Services/Utilities.svc/IsPrintDownloadDone",
  data: "{}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(msg) {
  if (msg.d)
  {
    $("#printLoadingPanel").css("display","none");
  }
  else  {window.setTimeout(checkIfDoneDownload,500);}
  },  
  error: function (xhr, textStatus, errorThrown) {
  if (xhr.status==12030) {checkIfDoneDownload();}
}
});
}

Теперь на стороне сервера я генерирую свои загрузки с помощью HTTP-обработчика.По сути, первое, что он делает, это устанавливает флаг уровня сеанса в false, затем последнее, что он делает, это возвращает ему значение true.Моя служба проверки выполнения просто возвращает значение флага.

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

Я столкнулся с такой же проблемой при создании отчетов.Простым решением было бы запустить отчет ночью, а затем записать его на сервер.Затем предоставьте ссылку на отчет.

Если вы в состоянии использовать ASP.NET AJAX, то я бы рекомендовал использовать UpdateProgress контроль (вместе с UpdatePanel).

Если вам нужно красивое анимированное gif-изображение, тогда ознакомьтесь Загрузка Ajax.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top