.NET C#使用ExcelPackage通过JS post导出为ex​​cel

我不知道我在这里错过了什么。 我有一个button,单击时,我使用JavaScript来调用控制器。 这个控制器应该创build一个excel文件并将其返回给用户,使他们能够下载/保存文件。 我已经尝试了一些不同的方法,但无法设法使其工作。 这是我的JavaScript方面:

function exportList() { var val = $("#team-dropdown").val(); const date = new Date().toISOString(); const param = { "Date": date, "GroupID": 1 } $.ajax({ url: "@Url.Action("ExportToExcel", "Home")", type: "POST", data: param }); } 

这是我的服务器端:

 public FileResult ExportToExcel(DateTime date, int groupID) { Load l = new Load(); List<Load> loadList = l.GetLoadsForGroup(date, groupID); var fileDownloadName = "fileName.xlsx"; var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; ExcelPackage pck = new ExcelPackage(); var ws = pck.Workbook.Worksheets.Add("New workbook"); ws.View.ShowGridLines = true; ws.DefaultColWidth = 25; ws.Cells[1, 1].Value = "Order #"; var currRow = 2; foreach (var load in loadList) { ws.Cells[2, 2].Value = load.LoadNumber; } var fs = new MemoryStream(); pck.SaveAs(fs); fs.Position = 0; var fsr = new FileStreamResult(fs, contentType); fsr.FileDownloadName = fileDownloadName; return (fsr); } 

不知道最好的办法是做什么。 如果有更好的方法,请随意阐述。

你的方法看起来不错。 在这种情况下,您只需要使用html form来发布而不是使用js函数。 另外,如果你想使用一个ActionResult你可以写:

 public ActionResult ExportToExcel() { Load l = new Load(); List<Load> loadList = l.GetLoadsForGroup(date, groupID); var fileDownloadName = "fileName.xlsx"; var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; ExcelPackage pck = new ExcelPackage(); var ws = pck.Workbook.Worksheets.Add("New workbook"); ws.View.ShowGridLines = true; ws.DefaultColWidth = 25; ws.Cells[1, 1].Value = "Order #"; var currRow = 2; foreach (var load in loadList) { ws.Cells[2, 2].Value = load.LoadNumber; } Response.Clear(); Response.ContentType = contentType; Response.AddHeader("content-disposition", "attachment; filename=\"" + fileDownloadName + "\""); Response.BinaryWrite(pck.GetAsByteArray()); Response.Flush(); Response.End(); return View(); } 

你得到和你的方法一样的结果。