ASP.net MVC 3 不会下载生成的文件



这是我控制器的代码片段...这一切都从我的索引开始。

 public ActionResult Index(...){
       //some code here
       return GenerateReport(...);
    }

迄今。。。出口商。生成报告() 返回生成的 excel 文件的正确路径...

public ActionResult GenerateReport(...){
      string pathOfGeneratedFile = exporter.GenerateReport(...);
      return DownloadFile(pathOfGeneratedFile, "application/vnd.ms-excel");
}

public FileResult DownloadFile(string filePath, string contentType = "application/octet-stream"){
         return File(filePath, contentType, Path.GetFileName(filePath)); 
}

实际上一路上没有发生错误/异常......但我期待我可以在生成文件后下载它......我手动打开了使用 OpenXMl 生成的文件,它确实打开了,所有信息都存储在那里......

这是我的观点...我对按钮的值进行了一些分析,以反映生成报告用户操作。这将提交到索引操作,如果单击生成按钮,它将确定用户操作...

<input class="btn btn-primary pull-right" type="submit" value="Generate Report" name="userAction"/>

编辑:我也在我的观点中使用了这个...

@using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "Get", UpdateTargetId = "recordList", InsertionMode = InsertionMode.Replace }))

顺便说一句,一旦所有操作完成...我可以在我的视图中看到垃圾值。我只想下载文件。谢谢。

无法下载文件的原因是您使用的是 AJAX 异步请求。AJAX 响应不能包含文件下载。您可以在控制器中尝试如下操作:

public ActionResult Index(...) {
    var fileName = GenerateReport();
    // store the file name somewhere on the server - do NOT pass it through the URL.
    this.TempData["DownloadFileName"] = fileName;
    this.TempData["DownloadContentType"] = "application/vnd.ms-excel";
    this.TempData.Keep("DownloadFileName");
    this.TempData.Keep("DownloadContentType");
    return new JavaScriptResult() { Script = "document.location = "" + this.Url.Action("Download") + "";" };
}
public ActionResult Download() {
    return File((string)this.TempData["DownloadFileName"], (string)this.TempData["DownloadContentType"], Path.GetFileName(filePath)); 
}
因此,您的 AJAX 请求

将导致重定向(不能使用 RedirectToAction,因为这会导致浏览器在 AJAX 请求内重定向)。然后,此重定向将指示浏览器在经典请求中下载文件。

相关内容

  • 没有找到相关文章

最新更新