无法使用ajax调用下载excel文件

时间:2016-11-29 09:23:25

标签: c# jquery asp.net ajax asp.net-mvc

我正在尝试使用以下代码创建和下载excel文件。当我在cshtml中使用window.open("Export");来调用控制器方法时,它工作正常。但是当我跟随ajax调用时它不起作用。我想用ajax调用它的原因是因为我将参数传递给他的控制器。 (我还没有写逻辑来使用这些参数。)

CSHTML

 var actionUrl = '@Url.Action("Export", "TrendsData")';
$.ajax({
                url: actionUrl,
                type: 'POST',
                cache: false,
                data: { col: FinalColumns.toString() },

                success: function (result) {

                    }
            });

控制器:

 public void Export(string col)
        {
            var grid = new GridView();
            var data = TempData["InstanceDataList"];
            List<InstanceDataLog> lst = new List<InstanceDataLog>();
            List<EToolsViewer.APIModels.InstanceDataLog> lstrefined = new List<InstanceDataLog>();
            lst=   (List<EToolsViewer.APIModels.InstanceDataLog>)TempData["InstanceDataList"];
            var r= lst.Select(e => new {e.CBlk_Avg_Hz, e.CBlk_Avg_MW}).ToList();

            grid.DataSource =r;
            grid.DataBind();

            Response.ClearContent();
            Response.AddHeader("content-disposition", "attachment; filename=Trendsdata_" + DateTime.Now.ToString("yyyyMMdd_HHmm") + ".xls");

            Response.ContentType = "application/excel";
            StringWriter sw = new StringWriter();
            HtmlTextWriter htw = new HtmlTextWriter(sw);

            grid.RenderControl(htw);

            Response.Write(sw.ToString());
            TempData["InstanceDataList"] = data;

            Response.End();

        }

使用上面的代码我可以调用控制器方法,但是文件没有下载,而使用window.open("Export");的问题是我无法传递参数。

我发现如果我再次将window.location = '@Url.Action("Export", "TrendsData",new { col = "a,b,c" })';放入成功方法中,它就会起作用。对此有解释吗?为什么我要打两个电话?

0 个答案:

没有答案