从Ajax表单内部下载文件的问题

时间:2011-02-08 00:04:33

标签: asp.net-mvc ajax razor

我有一个页面用于显示带有Ajax表单的报表。我想允许用户选择是否需要HTML,CSV或其他可下载格式的报告。 HTML部分工作正常但当我尝试下载CSV版本时,文件的内容显示在页面上,而不是提示用户下载。

如果我更改表单使其不再是Ajax表单,则文件下载有效,但显示HTML版本并不是那么好。有没有办法做我正在尝试的事情?

我的控制器有这样的代码:

switch (reportType)
{
  case ReportType.Csv:
    return File(reportDataAsBytes, "text/csv", "report.csv");
  default:
    return PartialView("DisplayAllOrders", reportData);
}

这是我认为的

@using (Ajax.BeginForm("ViewAllOrders", "Report", new AjaxOptions { UpdateTargetId = "reportContent", InsertionMode = InsertionMode.Replace }))
{
  Format:
  <select id="ReportType" name="ReportType">
    <option value="1">HTML</option>
    <option value="2">CSV</option>
  </select>
  <input type="submit" />
}

1 个答案:

答案 0 :(得分:1)

您不能使用AJAX从主HTML响应中导致文件下载。

解决这个问题的常用方法是使用不可见的IFrame ...告诉AJAX调用刷新IFrame并将IFrame的src设置为要在其load事件中发送的文件。