我有一个页面用于显示带有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" />
}
答案 0 :(得分:1)
您不能使用AJAX从主HTML响应中导致文件下载。
解决这个问题的常用方法是使用不可见的IFrame ...告诉AJAX调用刷新IFrame并将IFrame的src设置为要在其load事件中发送的文件。