将一个列表传递给控制器​​来下载一个excel文件

我将一个列表传递给我的控制器来生成一个需要由用户下载的Excel文件。 正在传递的列表可以达到10000条logging

这是我的控制器方法

[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. } }); 

我会欣赏这将导致成功的build议。

谢谢。

你不能通过ajax下载文件。

一种方法是serialize参数(列表)并使用window.location.assign

 var serialized = $.param(pack); window.location.assign(baseUrl + '/Client/Result' + '?' + serialized); 

一个可能的问题,你会遇到,因为你有很多的logging,可能是你会超过最大查询string的长度。

另外,从控制器方法中删除[HttpPost] ;


另一种方法是发送ajax请求,生成文件并保存,然后返回保存的文件的下载url,并以编程方式在js中创build一个锚点元素并单击它。

希望我可以帮忙,或者至less指向正确的方向。

[1] http://api.jquery.com/jquery.param/

[2] 使用Javascript / jQuery下载文件