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

时间:2013-01-11 06:26:42

标签: c# ajax asp.net-mvc

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文件,但没有任何事情发生。 请帮助我,请你帮忙。

1 个答案:

答案 0 :(得分: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>
}