C# 从数据库导出到Excel MVC

C# 从数据库导出到Excel MVC,c#,entity-framework,model-view-controller,C#,Entity Framework,Model View Controller,我是mvc和c的新手,一直在努力从db导出到Excel。在视图中,我有一个表和一个按钮导出,它从主控制器调用函数: <button type="submit" id="export" onclick="Export()">Export to Excel</button> <script> function Export() { $.ajax({ type: "GET",

我是mvc和c的新手,一直在努力从db导出到Excel。在视图中,我有一个表和一个按钮导出,它从主控制器调用函数:

<button type="submit" id="export" onclick="Export()">Export to Excel</button>
    <script>
        function Export() {
            $.ajax({
                type: "GET",
                url: "/Home/ExportToExcel",
                success: function(data) { },
                error: function() {
                    ErrorMessage("Error occurred");
                }
            });
        }
    </script>
public void ExportToExcel()
{
    var y = (from w in db.OrderProducts
             group w by w.IdOrder into TotaledOrder
             select new OrderP
             {
                 IdOrder = TotaledOrder.Key,
                 price = TotaledOrder.Sum(s => s.price)
             }).ToList();

    var result = (from o in db.Orders
                  join h in db.Clients on o.IdClient equals h.IdClient
                  select new OrderRep
                  {
                      IDOrder = o.IdOrder,
                      Data = o.Date,
                      Sum = 0,
                      Name = h.name,
                      Adress = h.adresa
                  }).ToList();

    foreach (var order in result)
    {
        order.Sum = y.Where(q => q.IdOrder == order.IDOrder).Sum(q => q.price);
    }

    string filename = "Orders.xls";
    System.IO.StringWriter tw = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
    DataGrid dgGrid = new DataGrid();
    dgGrid.DataSource = result;
    dgGrid.DataBind();

    dgGrid.RenderControl(hw);
    Response.ContentType = "application/vnd.ms-excel";
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");

    Response.Write(tw.ToString());
    Response.End();
}

我没有错误,但单击按钮时不会创建Excel文件。如果您能为我指出正确的方向,我将不胜感激。

您不能通过AJAX下载文件-接收到的数据最终会在页面内的JavaScript变量中,而不是在用户磁盘上的文件中

您需要使用常规HTTP请求。在新窗口中打开的超链接将执行此操作(而不是您的按钮):




注意,值得一提的是,您的action方法实际上创建了一个HTML字符串,然后使用“.xls”扩展名将其发送供下载,以给人一种Excel文件的印象,而实际上它不是。Excel当然可以打开和读取HTML文档,但它不是一个真正的Excel文件,您不能用它来完成所有可以用原生Excel文件完成的事情。您的数据可能也会在web浏览器中显示。

请使用Chrome Developer工具向我们显示此特定http请求的请求和响应标题。如果您视图中的表已包含您要导出到excel的信息,那么我将研究使用。它们为用户提供功能。
<a href="@Url.Action("ExportToExcel", "Home")" target="_blank">Export to Excel</a>