我正在尝试使用以下代码创建和下载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" })';
放入成功方法中,它就会起作用。对此有解释吗?为什么我要打两个电话?