2013-01-11 38 views
1

JS如何獲得csv文件使用AJAX後在C#

 $.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文件,但沒有happend。 請幫助我,你爲你的那種。

回答

2

這要下載一個CSV文件,但沒有happend

您不能下載使用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> 
} 
+0

非常感謝。我修好了。 – linh