点击一下按钮,我想根据从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");
}
答案 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()
电话
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));
}