我正在返回由表单发布事件触发的操作的文件结果。
我无法获取下载对话框。相反,如果我使用:
return File(Encoding.UTF8.GetBytes(reportPath), "text/plain", "Report.csv");
我在目标分区中执行Ajax时获取文件的路径。
当我使用
return File(reportPath, "text/plain", "Report.csv");
我在目标分区中获取文件的内容。
该行动被宣布为
[HttpPost]
public virtual ActionResult ExportFilter(Model model) {
string outputFile = CreateReport(model);
return File(....)
}
表单是通过ajax.begininform(…)提交的。
编辑
更多信息:我的表单有两个提交按钮。一个用于在目标DIV中显示结果,另一个用于导出结果。actton是相同的,我使用它来确定哪个按钮触发了事件:
[HttpPost]
public virtual ActionResult Run( model )
{
var bExecute = !string.IsNullOrEmpty(Request.Form["execute"]);
return bExecute ? Execute(model) : Export(model);
}
[HttpPost]
public virtual ActionResult Execute( model )
{
....
return PartialView("Report", model);
}
[HttpPost]
public virtual FileResult Export( model ) {
.....
return File(....)
}
在回答了一些问题后,我尝试重新定向以获得操作,方法是:
....
return RedirectToAction( MVC.Report.OfferDownload(ReportFile) );
}
[HttpGet]
public virtual FileResult OfferDownload(string FileName)
{
return File(FileName, "text/csv", "Report.csv");
}
但是,这没有帮助。
我还尝试流式传输文件,但也没用。
编辑2
当然是Ajax问题,因为当我用html.begingum替换ajax.begingum时,它会起作用。我想到的一个解决方案是在提交按钮上使用onclick事件来更改表单属性。