如何在c#中使用ajax post获取csv文件

本文关键字:post ajax 获取 csv 文件 | 更新日期: 2023-09-27 17:51:15

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文件,但什么也没发生。请帮帮我,谢谢你。

如何在c#中使用ajax post获取csv文件

应该下载一个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>
}