首页 > 解决方案 > 导出 Excel 数据时重定向到操作不起作用

问题描述

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 detail view,它不调试RedirectToAction

此外,我想同时下载 Excel 文件并执行页面刷新。我经历了许多解决方案,说“页面刷新和下载不能在一个响应中处理”或“你可以在 JavaScript 中通过setTimeout()”来处理。

有什么我只能在后面的代码中使用的东西吗?

标签: c#asp.net.netredirecttoaction

解决方案


该操作只能有一个结果。您不能同时下载文件并重定向到另一个操作,因为这是两个操作结果。

许多网站所做的是他们在弹出选项卡/窗口中打开下载文件的操作。这样,您当前的窗口仍然能够运行 JavaScript/Ajax 来执行其他操作,例如重定向到另一个页面。但是这种解决方案的缺点是使用现代浏览器阻止的弹出窗口,因此用户必须接受允许您网站的弹出窗口(临时或永久)。

正如您在问题中提到的,您也可以通过使用setTimeout()或其他机制在 JavaScript 中处理此问题。如您所见,任何解决此困境的方法都涉及以一种或另一种方式使用 JavaScript。那是因为服务器只能用一个响应来响应客户端。因此必须使用 JavaScript 向服务器发送多个请求。


推荐阅读