C# 从数据库导出到Excel MVC
我是mvc和c的新手,一直在努力从db导出到Excel。在视图中,我有一个表和一个按钮导出,它从主控制器调用函数: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",
<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>