使用Ajax或Post JSON启动文件下载而不使用Ajax

时间:2013-12-18 17:35:00

标签: c# javascript ajax asp.net-mvc json

我有一点工作完美的ajax。它发布到返回文件的C#控制器。不幸的是,我认为Ajax无法初始化文件下载。我真的需要发布JSON。 JSON包含用户应用于表的过滤器。我已经尝试将JSON作为字符串从输入中发布但它不起作用并且永远不会填充我的对象。我意识到我的C#代码什么都没做,但是返回一个文件,但是在我可以让简单的文件下载工作之后我会添加更多文件。

使用Javascript:

$.ajax(
    data: JSON.stringify(model),
    contentType: 'application/json',
    type: 'POST',
    url: 'Respondents/DownloadCSV',
    success: function () { alert('success'); },
    error: function () { alert('unsuccessful'); }
});

C#

[HttpPost]
public ActionResult DownloadCSV(RespondentViewModel model)
{
    string csv = "Name, Source, Email, City, State, Gender, Ethnicity, Age, Last Edit, Owner, Group, Status Date, Status";
    return File(new System.Text.UTF8Encoding().GetBytes(csv), "text/csv", "DispositionReport.csv");
}

3 个答案:

答案 0 :(得分:1)

我认为问题是网址,如下所示进行更改:

url: '/Respondents/DownloadCSV',

答案 1 :(得分:0)

解决方案是:

使用url属性返回json对象

{ redirect_url: '/blabla/path/to/file/download' }

通过JavaScript重定向到此网址,ajax成功

$.ajax(
    data: JSON.stringify(model),
    contentType: 'application/json',
    type: 'POST',
    url: 'Respondents/GetJsonResult', // !!!
    success: function (result) {
            if (result.redirect_url) {
                window.location = result.redirect_url;
            }
        },
    error: function () { alert('unsuccessful'); }
});

答案 2 :(得分:0)

我终于找到了解决我的ajax问题的方法。我使用了stackoverflow帖子中找到的答案:jQuery post request (not ajax)