Выполнение JavaScript при возврате FileResult

0

(используя ASP.NET MVC) Я работаю над страницей, которая генерирует Excel-отчет при нажатии кнопки. Содержимое отчета зависит от выбора пользователя, поэтому для генерации может потребоваться 5 секунд, или это может занять 30 секунд.

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

Когда пользователь нажимает кнопку генерации отчета, я отправляю форму:

$("#genReportBtn").click(function () {
  ...processing stuff...
  $("#genContractForm").submit();       
});

Какие ссылки на функцию типа FileResult на стороне сервера:

public FileResult GenReport(...Variables...)
{
    ...Generating Excel File...

    return File(output.ToArray(),
        "application/vnd.ms-excel",
        "report.xls");
}

Что запускает загрузку.

Есть ли способ обнаружить эту сторону браузера возврата?

  • 0
    Загрузка файла или обработка сервера занимает здесь больше всего времени?
  • 0
    Это обработка сервера, которая занимает некоторое время. Как только загрузка началась, я бы хотел закрыть загрузочное сообщение.
Теги:
asp.net-mvc

1 ответ

1

Вам нужно будет заглянуть в signalR, чтобы продвинуть клиента к клиенту или использовать технику, которая в основном проводит опросы о прогрессе. Например, мне пришлось обновить отчет, который предоставил файл pdf/excel для отдельного пользователя, чтобы отобразить отчет для широкого круга пользователей. Я смог проанализировать обработку, чтобы, если пользователь запросил 45 пользовательских отчетов, я мог бы сформулировать индикатор прогресса, который будет обновляться на клиенте для каждого из 45 отчетов.

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

  • 0
    Спасибо за помощь. Это выглядит немного сложнее, чем я ожидал, но, конечно, кажется выполнимым.
  • 0
    На самом деле, SignalR - типичный пример того, что легче сделать, чем сказать.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню