我有一点工作完美的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");
}
答案 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)