Javascript 如何使用JQuery和ASP.NET MVC4返回要在单击按钮时下载的Excel文件
我在控制器“MetasComisionesController”中使用了以下方法 我有以下javascript代码:Javascript 如何使用JQuery和ASP.NET MVC4返回要在单击按钮时下载的Excel文件,javascript,jquery,asp.net-mvc-4,Javascript,Jquery,Asp.net Mvc 4,我在控制器“MetasComisionesController”中使用了以下方法 我有以下javascript代码: function btnExportar() { var r = confirm("Desea exportar todos los Intervalos de Comision ?"); if (r == true) { //window.alert("Iniciar Exportacion"); $.post("@Url
function btnExportar() {
var r = confirm("Desea exportar todos los Intervalos de Comision ?");
if (r == true) {
//window.alert("Iniciar Exportacion");
$.post("@Url.Action("ExportarIntervalos")",{},
function (data) {
alert("La EXPORTACION TERMINO");
window.location = "/MetasComisiones/" + "ExportacionExcel";
});
} else {
window.alert("Exportacion CANCELADA");
}
}
这是从按钮onclick事件调用的
<button type="button" class="btn" name="btnExportar" onclick="btnExportar()">Exportar</button>
Exportar
如何更改之前的任何组件或逻辑,使按钮btnExportar返回作为响应的一部分必须下载的文件?我真的不需要重定向到新位置,而不是写入响应,然后返回视图,只需返回文件响应即可。通常,对于实际的文件系统文件,或者至少对于流来说,这是微不足道的,但是对于字符串来说也不难 也许是这样的:
var fileContent = sw.ToString();
var fileBytes = Encoding.UTF8.GetBytes(fileContent);
var result = new FileContentResult(fileBytes, "application/ms-excel");
result.FileDownloadName = "MyExcelFile.xls";
return result;
这里的另一个好处是,通过删除对Response
的引用并仅返回一个结果,您还可以更有效地对该方法进行单元测试
然而,问题在于客户端代码。除非最近有所改变,否则AJAX不能用于下载文件。您可以下载数据(因为客户端回调函数中的
data
变量将包含响应),但据我所知,没有办法(除了ActiveX对象等您确实不想使用的对象之外)提示用户将响应另存为文件
不过,好消息是,文件响应不会在浏览器中卸载页面内容。因此,您实际上不需要使用AJAX本身,只需将用户指向文件请求即可。(或者,如果浏览器配置为查看文件内容而不是提示保存文件内容,请指示用户进入新选项卡/窗口。)
由于没有实际发布的数据,只需执行正常重定向:
window.location = '@Url.Action("ExportarIntervalos")';
(请记住从控制器操作中删除[HttpPost]
属性,因为这将是一个GET
请求。如果需要使用POST
,则可能需要在页面上放置一个隐藏表单,然后只需在该表单上调用.submit()
。
可用于直接导入表
window.location = '@Url.Action("ExportarIntervalos")';
$("#Xcel").click(function () {
$("#Tab").table2excel({
exclude: '.exclude',
filename: 'MatchedSDNListNames.xls'
});
})