1

js

     $.ajax({
    type: "post",
    url: "/Sum/MemberDayCSV",
    data: { Date: date, Detail: detail, ConditionDisplay: conditionDisplay },
    success: function (eg) {
        console.log(eg);
    }
});

C#

   [HttpPost]
public FileContentResult MemberDayCSV()
{
    string csvContent = "1,2,3,4,5,6";

    return File(new System.Text.UTF8Encoding().GetBytes(csvContent), "application/csv", "sum_member_day.csv"); ;

}

它应该是下载一个csv文件,但什么也没发生。请帮助我,谢谢你的好意。

4

1 回答 1

2

应该是下载一个csv文件,但什么也没发生

您不能使用 AJAX 请求下载文件。问题是 AJAX 请求正在发送到服务器,而您正在客户端上的回调中接收 CSV。但是由于这个回调是在客户端运行的,所以不能提示用户保存文件,更不能直接在文件系统上保存文件。那将是一个巨大的安全漏洞。

相反,您应该做的是为用户提供指向您的控制器操作的单个链接,以便他在单击链接时可以下载 CSV:

@Html.ActionLink("Download CSV", "MemberDayCSV", "Sum", null, null)

如果你想将一些参数传递给这个控制器动作,只需使用正确的重载:

@Html.ActionLink(
    "Download CSV", 
    "MemberDayCSV", 
    "Sum", 
    new {
        date: "some date",
        detail: "some detail",
        conditionDisplay: "some condition display"
    }, 
    null
)

作为替代方案,您还可以使用指向相同控制器操作的 HTML 表单:

@using (Html.BeginForm("MemberDayCSV", "Sum"))
{
    @Html.Hidden("Date", "some date")
    @Html.Hidden("Detail", "some detail")
    @Html.Hidden("ConditionDisplay", "some condition display")

    <button type="submit">Download CSV</button>
}
于 2013-01-11T06:31:44.260 回答