Javascript 如何使用JQuery和ASP.NET MVC4返回要在单击按钮时下载的Excel文件

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

我在控制器“MetasComisionesController”中使用了以下方法

我有以下javascript代码:

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'
        });
    })