Ajax调用返回excel文件流的控制器导致错误形成错误

时间:2016-02-16 18:31:23

标签: jquery json ajax asp.net-mvc-5

我们当前的网站有几个html数据表,可以在客户端进行排序,然后他们想要导出到excel文件。我试图创建泛型方法,可以处理传递到控制器的任何表数据,并仅在内存中创建该文件。我只是使用一个简单的按钮单击事件来启动一个将JSON对象传递给控制器​​的ajax调用,如下所示:

  var convertedTable = JSON.stringify({ myTableArray: myTableArray });

$.ajax({
    type: 'POST',
    url: '/TableToExcel',
    data: JSON.stringify({ myTableArray: myTableArray }),
    contentType: 'application/json; charset=utf-8',
     dataType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    success: function (returnValue) {

        window.location = '/Reports/Download?file=' + returnValue;

    }
});

控制器现在很简单,并且在浏览器直接调用时返回文件。

    public FileResult Index(List<string[][]> tableData)
    {
        ExcelPackage pck = new ExcelPackage();
        var ws = pck.Workbook.Worksheets.Add("Sample2");

        ws.Cells["A1"].Value = "Sample 2";
        ws.Cells["A1"].Style.Font.Bold = true;

        var stream = new MemoryStream(pck.GetAsByteArray());

        return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");

我在FF调试器中一直收到错误的错误。这是处理这个问题的正确方法吗?

我也认为表单是更好的方法,但不确定是否可行,因为我需要在提交表单之前先处理表数据,并且需要使用POST来处理JSON对象。

任何有关处理此问题的最佳方法的建议也将受到赞赏。

1 个答案:

答案 0 :(得分:2)

任何寻找答案的人。 你可以这样做。 我实际上是试图将文件本身传回去。从我所阅读和确定的Ajax只接受字符串。我回来的所有例子都返回了保存的文件位置而不是文件本身。