我看过很多关于将文件返回到视图并刷新的问题和帖子。我的问题是返回工作在Firefox,Chrome等,但不适用于IE。当在IE中执行相同的代码时,它实际上刷新了视图,但我没有获得文件。我在aspx上的脚本中有一个单击处理程序
function RunReport(iExport) {
var fromDate = "";
var toDate = "";
fromDate = viewModel.FromDate;
toDate = viewModel.ToDate;
$.ajax({
url: 'Reports/RunReport',
type: 'POST',
dataType: "json",
traditional: true,
data: { 'fromdate': fromDate, 'toDate': toDate, 'doExport': iExport },
success: function (data) {
if (data.success == "true") {
location.reload();
}
},
error: function (e) {
//notify.show({type: 'error', header: "Error applying Filters!", content: "Unable to apply filters." + e });
}
});
}
RunReport
操作设置一些变量,返回一个真实的结果,然后页面重新加载检查iExport
变量。
在加载页面(ActionResult Index()
)期间,使用已设置的某些过滤器和变量刷新数据。然后如果iExport = 1
确实如此:return ExportReport(model);
出口报告:
public FileContentResult ExportReport(ReportViewModel model)
{
string sCSV = "";
sCSV = DoSomeProcessingToGetCSVString...;
//我已尝试使用和不使用标题
var cd = new System.Net.Mime.ContentDisposition
{
// for example foo.bak
FileName = "Test.csv",
Inline = false,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(new System.Text.UTF8Encoding().GetBytes(sCSV), "text/csv", "Test.csv");
}
当它返回文件时,它实际上只是刷新/重新加载调用Index()动作结果的页面,它永远不会产生下载。这在其他浏览器中有效,并且不刷新页面
最初收到iExport = 1时我将其重置为null,因此返回页面将不会继续导出。如果我评论出来并让它保持= 1然后第二次加载它会导出文件,但当然导航到空白页。
有没有更好的方法来实现这一点,或IE存在问题(我在IE11上)?