Перенаправление на действие не работает при экспорте данных Excel - PullRequest
0 голосов
/ 10 апреля 2020
public ActionResult FileDownload(Files FileData)
{
    dynamic data = FileDownload(FileData);
    var Platform= Enum.Parse(typeof(Platform),FileData.PlatformNo.ToString());
    var fileName = "_Orders_" + FileData.CountryCode + "_" + FileData.Month 
                   + "_" + FileData.Year + "_" + Platform + "_" + FileData.Currency;
    var workSheetName = "_File";

    ExcelHelper.ExportToExcel(data, workSheetName, fileName, "A1:Y1", Response, 6, 7, 8);

    return RedirectToAction("AzureDetail", new { id = FileData.FileId, FileData });
}

<td>
  <a ng-click="post('/Plan/FileDownload',FileData)" class="btn btn-primary btn-xs">Download</a>
</td>

Запустив этот фрагмент кода, я не могу отладить в подробном представлении azure, он не отлаживается RedirectToAction.

Более того, я хочу чтобы загрузить файл Excel и выполнить одновременное обновление страницы sh. Я прошел через множество решений, которые говорят: «обе страницы ссылаются на sh, и загрузка не может быть обработана в одном ответе» или «вы можете обработать это в JavaScript на setTimeout()».

Есть ли что-нибудь, что я могу использовать только в коде для этого?

1 Ответ

0 голосов
/ 10 апреля 2020

Действие может иметь только один единственный результат. Вы не можете загрузить файл и одновременно перенаправить на другое действие, потому что это два результата действия.

Многие веб-сайты открывают действие для загрузки файла во всплывающей вкладке / окне. Таким образом, ваше текущее окно все еще может запускать JavaScript / Ajax для выполнения других действий, таких как перенаправление на другую страницу. Но у этого решения есть недостаток использования всплывающих окон, которые блокируются современными браузерами, поэтому пользователь должен принять разрешение (временное или постоянное) всплывающих окон для вашего сайта.

Как вы упомянули в своем вопросе, вы также можете справиться с этим в JavaScript, используя setTimeout() или другие механизмы. Как видите, любое решение этой дилеммы предполагает использование JavaScript тем или иным способом. Это потому, что сервер может ответить клиенту только одним ответом. Таким образом, JavaScript должен использоваться для отправки более одного запроса на сервер.

...