我有一个Bootstrap应用程序,它显示数据列表。我在页面底部有一个按钮,单击该按钮可创建一个Excel文件并将其发送回客户端。

用户单击以启动该过程的链接(按钮)如下:

<li><a href ="javascript:ExportToExcel();" class="btn btn-info btn-sm">Export list to Excel</a></li>


被调用的JavaScript函数如下所示:

function ExportToExcel() {
        var Url = "/UserLocation/ExportToExcel";

        $.get(Url);
     }


我知道这可能不正确,但是它确实正确地调用了创建Excel电子表格的C#函数。

我的C#函数如下所示:

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


此刻,当用户单击按钮时,将调用我的C#函数,但没有任何返回给客户端。我怀疑我的JS函数不正确,但是我真的不知道该怎么做才能使其正确。我也不知道在C#方法(C#方法的最后一行)中使用哪种MIME类型。有没有更好的方法来完成所有这些工作?我对JavaScript相当陌生。

最佳答案

使用$.get(),您可以通过ajax获取数据。浏览器将在ajax响应中获取文件内容,但是无法向用户提供将这些数据另存为文件的方法。 (嗯,在大多数浏览器中是technically is possible,虽然是but not in all of them,但在some more are supported with this js中却很明显。但是,在这种情况下,这显然是多余的。感谢zerkms的评论)。

解决方案要简单得多,请使用旧的window.open(url),因此将在新的浏览器窗口中打开文件,并会邀请用户打开或保存该文件(取决于浏览器配置)。

或直接使用这样的链接:

<li><a href ="/UserLocation/ExportToExcel" class="btn btn-info btn-sm">
    Export list to Excel</a></li>


(除非您的js函数进行了一些额外的处理)。

关于javascript - MVC 5-如何将Excel文件发送到客户端?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23400392/

10-12 12:43
查看更多