Javascript MVC 5-如何向客户端发送Excel文件?
我有一个显示数据列表的引导应用程序。我在页面底部有一个按钮,单击该按钮时,会创建一个Excel文件并将其发送回客户端 用户单击以启动流程的链接按钮如下所示:Javascript MVC 5-如何向客户端发送Excel文件?,javascript,asp.net-mvc,asp.net-mvc-4,Javascript,Asp.net Mvc,Asp.net Mvc 4,我有一个显示数据列表的引导应用程序。我在页面底部有一个按钮,单击该按钮时,会创建一个Excel文件并将其发送回客户端 用户单击以启动流程的链接按钮如下所示: <li><a href ="javascript:ExportToExcel();" class="btn btn-info btn-sm">Export list to Excel</a></li> 我知道这可能不对,但它确实正确地调用了创建Excel电子表格的C函数 我的C函数如下所示:
<li><a href ="javascript:ExportToExcel();" class="btn btn-info btn-sm">Export list to Excel</a></li>
我知道这可能不对,但它确实正确地调用了创建Excel电子表格的C函数
我的C函数如下所示:
function ExportToExcel() {
var Url = "/UserLocation/ExportToExcel";
$.get(Url);
}
public ActionResult ExportToExcel()
{
var locationList = this.UserLocationData.GetList(this.AccountRowId).AsEnumerable();
ExcelPackage package = Common.Excel.CreateExcelFile(locationList);
var cd = new System.Net.Mime.ContentDisposition
{
// for example foo.bak
FileName = "ExcelTest.xlsx",
// Always prompt the user for downloading, set to true if you want the browser to try to show the file inline
Inline = false,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(package.GetAsByteArray(), "application/force-download");
}
<li><a href ="/UserLocation/ExportToExcel" class="btn btn-info btn-sm">
Export list to Excel</a></li>
此时,当用户单击按钮时,会调用MyC函数,但不会向客户端返回任何内容。我怀疑我的JS函数不正确,但我真的不知道该怎么做才能使它正确。我也不知道在我的C方法中使用什么MIME类型——C方法的最后一行。有没有更好的方法来完成这一切?我对JavaScript相当陌生。使用$。获取您正在通过ajax获取数据。浏览器将在ajax响应中获取文件内容,但无法向用户提供将此数据保存为文件的方法。不过,在大多数浏览器中。但很明显,这件事太过分了。感谢虫族的评论
解决方案要简单得多,使用旧的good window.openurl,以便在新的浏览器窗口中打开文件,并根据浏览器配置邀请用户打开或保存文件
或者直接使用如下链接:
function ExportToExcel() {
var Url = "/UserLocation/ExportToExcel";
$.get(Url);
}
public ActionResult ExportToExcel()
{
var locationList = this.UserLocationData.GetList(this.AccountRowId).AsEnumerable();
ExcelPackage package = Common.Excel.CreateExcelFile(locationList);
var cd = new System.Net.Mime.ContentDisposition
{
// for example foo.bak
FileName = "ExcelTest.xlsx",
// Always prompt the user for downloading, set to true if you want the browser to try to show the file inline
Inline = false,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(package.GetAsByteArray(), "application/force-download");
}
<li><a href ="/UserLocation/ExportToExcel" class="btn btn-info btn-sm">
Export list to Excel</a></li>
除非你的js函数做了一些额外的处理。使用$。get你是通过ajax获取数据的。浏览器将在ajax响应中获取文件内容,但无法向用户提供将此数据保存为文件的方法。不过,在大多数浏览器中。但很明显,这件事太过分了。感谢虫族的评论
解决方案要简单得多,使用旧的good window.openurl,以便在新的浏览器窗口中打开文件,并根据浏览器配置邀请用户打开或保存文件
或者直接使用如下链接:
function ExportToExcel() {
var Url = "/UserLocation/ExportToExcel";
$.get(Url);
}
public ActionResult ExportToExcel()
{
var locationList = this.UserLocationData.GetList(this.AccountRowId).AsEnumerable();
ExcelPackage package = Common.Excel.CreateExcelFile(locationList);
var cd = new System.Net.Mime.ContentDisposition
{
// for example foo.bak
FileName = "ExcelTest.xlsx",
// Always prompt the user for downloading, set to true if you want the browser to try to show the file inline
Inline = false,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(package.GetAsByteArray(), "application/force-download");
}
<li><a href ="/UserLocation/ExportToExcel" class="btn btn-info btn-sm">
Export list to Excel</a></li>
除非你的js函数做了一些额外的处理。$。get不应该开始为客户端下载。它只需要一些你可以在脚本中处理的数据。是的,我很确定我没有这个权利。我只是没有足够的经验知道该使用什么。$.get不应该开始为客户端下载。它只需要一些你可以在脚本中处理的数据。是的,我很确定我没有这个权利。我只是没有足够的经验知道该使用什么。除非javascript做了一些特殊的事情,否则你也可以只使用一个链接。i、 你不能对ajax接收到的数据做任何事情。-这个短语非常奇怪,我想JotaBe的意思是,一旦你通过javascript接收到数据文件,你就不能将它下载到你的机器上。这一点很好。英语不是我的母语,我尽力做到最好。。。这一次,我最好的一面真的很难看。我希望它现在更清楚了。@zerkms虽然我喜欢下载属性,但这并不完全是一个例子,一旦你通过javascript收到它,就像Rowan Freeman说的那样。如果javascript做了一些特殊的事情,你也可以只使用一个链接。i、 你不能对ajax接收到的数据做任何事情。-这个短语非常奇怪,我想JotaBe的意思是,一旦你通过javascript接收到数据文件,你就不能将它下载到你的机器上。这一点很好。英语不是我的母语,我尽力做到最好。。。这一次,我最好的一面真的很难看。我希望现在更清楚了。@zerkms虽然我喜欢下载属性,但这并不是像罗恩·弗里曼所说的那样,一旦你通过javascript收到它,那就完全是一个例子