通过在ASP.NET MVC中发布JSON数据下载CSV文件
在ASP.NETMVC中,我试图通过post下载文件并发送JSON数据。这些JSON数据是通过knockout.js在页面上显示的数据的过滤器。critieria对象始终为空。如何通过javascript或表单post发送post数据来下载文件?我使用GET完成了ajax下载,但现在我有了额外的数据,比如我需要发布的数组 表格通过在ASP.NET MVC中发布JSON数据下载CSV文件,asp.net,asp.net-mvc,json,download,http-post,Asp.net,Asp.net Mvc,Json,Download,Http Post,在ASP.NETMVC中,我试图通过post下载文件并发送JSON数据。这些JSON数据是通过knockout.js在页面上显示的数据的过滤器。critieria对象始终为空。如何通过javascript或表单post发送post数据来下载文件?我使用GET完成了ajax下载,但现在我有了额外的数据,比如我需要发布的数组 表格 <form method="POST" action="@Model.ExportUrl" > <input type="hidden" nam
<form method="POST" action="@Model.ExportUrl" >
<input type="hidden" name="criteria" data-bind="value: ko.toJSON(data())" />
<button class="btn"><i class="icon-download-alt"></i> Export</button>
</form>
控制器
[HttpPost]
public virtual ActionResult Export(int eventId, DivisionTeamsTableCriteria criteria)
{
您可以尝试像这样将表单发布到Iframe 在iframe asp.net页面上,您可以这样编写响应文件
- Iframe可以是1x1像素
ko.bindingHandlers.download = {
init: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor()),
id = 'download-iframe-container',
iframe;
$(element).unbind('click').bind('click', function () {
iframe = document.getElementById(id);
if (!iframe) {
iframe = document.createElement("iframe");
iframe.id = id;
iframe.style.display = "none";
}
if (value.data) {
iframe.src = value.url + (value.url.indexOf('?') > 0 ? '&' : '?') + $.param(ko.mapping.toJS(value.data));
} else {
iframe.src = value.url;
}
document.body.appendChild(iframe);
return false;
});
}
};
有趣,但我不认为这能解决JSON问题。哪个JSON问题?在代码背后解析JSON?注意,我在上面粘贴的请求底部发送原始JSON作为参数。
ko.bindingHandlers.download = {
init: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor()),
id = 'download-iframe-container',
iframe;
$(element).unbind('click').bind('click', function () {
iframe = document.getElementById(id);
if (!iframe) {
iframe = document.createElement("iframe");
iframe.id = id;
iframe.style.display = "none";
}
if (value.data) {
iframe.src = value.url + (value.url.indexOf('?') > 0 ? '&' : '?') + $.param(ko.mapping.toJS(value.data));
} else {
iframe.src = value.url;
}
document.body.appendChild(iframe);
return false;
});
}
};