从按钮asp.net mvc下载服务器生成的文件

时间:2018-03-08 11:55:43

标签: asp.net-mvc

好吧,这听起来对我来说是愚蠢的,但我显然有一个"糟糕的大脑日"并需要帮助。

点击一下按钮,我想根据从2个ViewData字段和一个复选框控件中获取的参数生成一个文件,然后下载/显示该文件,就像使用固定链接一样。

大多数情况都很顺利,控制器方法会像这样传回一个文件:Return File(filePath, "text/csv") - 但是接着是什么?如何将其连接到按钮并显示文件下载/打开对话框?

我觉得我错过了一些非常简单的事情。只是通过ajax调用控制器似乎什么都不做......代码被调用但我看不到结果

*****编辑:******

以下内容为我提供了一个自动下载的文件,但名称为" download" - 我想为用户提供打开或下载的选项,并设置文件名 - 我该怎么做?

serialize = function (obj) {
    var str = [];
    for (var p in obj)
        if (obj.hasOwnProperty(p)) {
           str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
        }
    return str.join("&");
};

 var params = {
    ID1: '@ViewData("ID1")',
    ID2: '@ViewData("ID2")',
    flag: getFlag()
 };

 var actionUrl = ('@Url.Action("ProduceReport", "Report")');
    actionUrl += "/?" + serialize(params);

 window.open(actionUrl);

*第二次编辑* 控制器代码 - 这会生成一个文件并返回路径。在调用ProduceReport后,该文件就在那条路径上,我已经检查了。它在生产中用于通过电子邮件发送文件(工作正常)。

public FileResult ProduceReport(int ID1, int ID2, bool flag = false)
{
    var filePath = ExcelReports.ProduceReportExcel(Models.UserInfo.GetCurrentUserID, ID1, ID2, flag);        
    return File(filePath,"application/vnd.ms-excel");
}

1 个答案:

答案 0 :(得分:0)

我发现可接受的妥协,至少要下载文件。我将不得不做进一步的研究,看看我是否可以自动打印。

使用Javascript:

serialize = function (obj) {
    var str = [];
    for (var p in obj)
        if (obj.hasOwnProperty(p)) {
           str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
        }
    return str.join("&");
};

 var params = {
    ID1: '@ViewData("ID1")',
    ID2: '@ViewData("ID2")',
    flag: getFlag()
 };

 var actionUrl = ('@Url.Action("ProduceReport", "Report")');
    actionUrl += "/?" + serialize(params);

 window.location.href = actionUrl;

控制器:注意File()电话

上的第3个参数
public FileResult ProduceReport(int ID1, int ID2, bool flag = false)
{
    var filePath = ExcelReports.ProduceReportExcel(Models.UserInfo.GetCurrentUserID, ID1, ID2, flag);        
    return File(filePath,"application/vnd.ms-excel",System.IO.Path.GetFileName(filePath));
}