MVC C#从控制器返回文件之前,请先返回partialView



是否可以从同一控制器返回FileContentResult和PartialView?我无法使它起作用。主控制器代码:

...
var generateClass = new GenerateExcel(); // create obj of another class
generateClass.Generate(reports); // generate .xlsx file and save it to server disk
Download(); // ??? download file to client PC via "Save as.." dialog
return PartialView("_PartialReport", reports); // second (main) return and the end of controller

下载方法:

public FileContentResult Download()
{
    using (HostingEnvironment.Impersonate())
    {
         byte[] doc = System.IO.File.ReadAllBytes(@"C:tempBLP.xlsx");
         // doc is OK, it's size == size of .xlsx file
         return File(doc, "application/vnd.ms-excel");
    }
}

没有错误,但行不通。请帮助某人?

update :ajax代码示例

// Generate report by creation date
function ConstructReportByDate() {
    var date1 = $('#DateFrom').val();
    var date2 = $('#DateTo').val();
    $.ajax({
        url: '/Reports/ConstructReport',
        type: "POST",
        contentType: 'application/json; charset=utf-8',
        cache: false,
        data: '{"kind":"byDate", "date1":"' + date1 + '", "date2":"' + date2 + '"}'
    })
    .done(function (data) {
        $('#Report').html(data);
    })
    .fail(function (xhr) {
        alert('errorHere');
    });
}

您需要提出2个请求才能下载文件并以2个不同的操作显示部分视图。

显示部分视图的代码似乎还可以,但是文件不会下载,因为您没有将其作为操作的结果设置。

要下载文件,您必须提出第二个请求。您无法使用Ajax调用它,因为浏览器不会将其作为文件降低。只需重定向到文件。查看此问题以查看如何执行:使用JavaScript/jquery

下载文件

如果部分视图和文件基于同一报告,则两个请求可以生成两次,请考虑添加一些缓存以避免生成具有相同参数的报告几次。

最新更新