我正在返回由表单发布事件触发的操作的文件结果。 我无法获得下载对话框。相反,如果我使用:没有与FileResult的下载对话框
return File(Encoding.UTF8.GetBytes(reportPath), "text/plain", "Report.csv");
我在目标div中获得执行ajax时文件的路径。
当我使用
return File(reportPath, "text/plain", "Report.csv");
我得到目标DIV文件的内容。作为
[HttpPost]
public virtual ActionResult ExportFilter(Model model) {
string outputFile = CreateReport(model);
return File(....)
}
的形式通过Ajax.BeginForm(...)submited
动作声明。更
编辑
有点信息:我的形式有2个提交按钮。一个用于在目标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");
}
然而,这并没有帮助。
我也尝试过Stream文件,但它也没有帮助。
EDIT2
肯定阿贾克斯问题,因为当我与Html.BeginForm取代Ajax.BeginForm它的工作原理。我想到的一个解决方案是使用提交按钮上的onclick事件来更改表单属性。
我认为主要问题是AJAX提交 - 请参阅我的更新答案。 – tvanfosson 2010-03-22 19:26:46
您应该在POST请求后重定向用户,并让该方法提供该文件。邮政/重定向/获取。您还应该明确地将您的操作方法的返回类型设置为FileResult。 – 2010-03-22 19:36:07
我确实尝试过,看我的编辑。 – majkinetor 2010-03-23 10:50:19