我将一个列表传递给我的控制器以生成需要用户下载的Excel文件。传递的列表最多可达10000条记录
这是我的控制器方法
[HttpPost]
public FileResult Result(List<List> Content)
{
var stream = new MemoryStream();
var serializer = new XmlSerializer(typeof(List<Content>));
var data = Transformer.TransformToExcelFormat(Content);
//We turn it into an XML and save it in the memory
serializer.Serialize(stream, data);
stream.Position = 0;
//We return the XML from the memory as a .xls file
return File(stream, "application/vnd.ms-excel", "Template.xls");
}
这是我的java脚本
var Content = { "Content": ItemList() };
var pack = ko.toJSON(Content);
$.ajax({
url: baseUrl + '/Client/Result',
type: "POST",
datatype: "json",
data: pack,
contentType: 'application/json; charset=utf-8',
success: function (data) {
// Just wondering how to handle success result.
}
});
我将赞赏能够带来成功的建议。
感谢。
答案 0 :(得分:1)
您无法通过ajax下载文件。
一种方法是serialize
参数(列表)并使用window.location.assign
:
var serialized = $.param(pack);
window.location.assign(baseUrl + '/Client/Result' + '?' + serialized);
由于您有大量记录而可能会遇到的问题可能是您将超出最大查询字符串长度。
此外,从控制器方法中删除[HttpPost]
;
另一种方法是发送ajax请求,生成文件并保存,然后返回该保存文件的下载URL,并以编程方式在js中创建一个锚元素并单击它。
希望我能提供帮助,或者至少指出正确的方向。