2

Jquery Post を持つ MVC アプリケーションがあります

$.post(virtualPath + cookie + this.pageName + '/FunctionA/', parameters,function (filedata) {
    alert(filedata);
    },'application/csv'); 
}

この投稿は、ファイルをダウンロードするためのボタンクリックによってトリガーされる Javascript イベントから呼び出されます

アラートでサーバー側の HTTP ファイル応答を取得しましたが、ブラウザーでダウンロード可能にできません

コントローラーは応答を FileContentResult として返します

[AcceptVerbs(HttpVerbs.Post)]
    public FileContentResult FunctionA(string A, DateTime B)
    {
        try
        {
            string csv = "Make it downloadable ";
            var filresult = File(new System.Text.UTF8Encoding().GetBytes(csv), "application/csv", "downloaddocuments.csv");
           // return filresult;

            Response.Clear();
            Response.Buffer = true;
            Response.ContentType = "application/vnd.ms-excel";
            Response.AddHeader("content-disposition", "attachment; filename=Statement_" + "Downloadfile" + ".csv");
            Response.Write(csv);
            Response.Flush();
            return filresult;
        }
    }
4

1 に答える 1

4

AJAX を使用してファイルをダウンロードすることはできません。その理由は、ダウンロードが成功し、成功のコールバックが呼び出されると、クライアント ブラウザにファイルを自動的に保存することも、[名前を付けて保存] ダイアログを表示することもできないためです。

したがって、javascript と AJAX を使用してこのファイルをダウンロードする代わりに、コントローラー アクションへの標準リンクを使用するだけで、ユーザーはファイルを直接ダウンロードできます。


アップデート:

コメント セクションで要求されているように、アンカーを使用した例を次に示します。

@Html.ActionLink(
    "download file", 
    "actionName",
    "controllerName",
    new {
        param1 = "value1",
        param2 = "value2",
    },
    null
)

または、多くのパラメーターを渡す必要がある場合は、POST する隠しフィールドを持つフォームを使用することをお勧めします。

@using (Html.BeginForm("actionName", "controllerName"))
{
    @Html.Hidden("param1", "value1")
    @Html.Hidden("param2", "value2")
    <button type="submit">Download file</button>
}
于 2012-05-04T05:53:07.987 に答える