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 に答える