我有一个动态生成的HTML表格。我有一个ActionResult方法" GetOrders"返回基于用户提供的日期范围的OrderViewModel列表对象。渲染表后,我希望有第二个Action方法将该数据导出到excel文件。
我的问题是:我是否必须解析渲染到数据集/网格视图中的HTML表格,或者是否有办法保存原始数据中正在查询的数据" GetOrders"行动方法?这样我就可以将它传递给导出的第二个函数。
我提供了一些代码来帮助理解我想要完成的事情。
[HttpPost]
public ActionResult GetOrders(DateTime startDate, DateTime endDate)
{
var model = db.SalesOrderDetails
.Where(e => e.SalesOrderHeader.OrderDate > startDate)
.Where(e => e.SalesOrderHeader.OrderDate < endDate)
.Join(db.Products, order => order.ProductID,
product => product.ProductID,
(order, product) => new OrderViewModel()
{
Quantity = order.OrderQty,
UnitNet = order.UnitPrice,
DueDate = order.SalesOrderHeader.DueDate,
CustomerPO = order.SalesOrderHeader.PurchaseOrderNumber,
InvoiceNumber = order.SalesOrderHeader.SalesOrderNumber,
InvoiceTotal = order.SalesOrderHeader.TotalDue,
OrderDate = order.SalesOrderHeader.OrderDate,
AccountNumber = order.SalesOrderHeader.AccountNumber,
Store = order.SalesOrderHeader.Customer.Store.Name,
Customer = order.SalesOrderHeader.Customer.Person.FirstName + " " +
order.SalesOrderHeader.Customer.Person.LastName,
ProductNumber = product.ProductNumber
}).Take(15);
return View(model.ToList());
}
有没有办法去抓住&#34;这个数据并将其传递给第二个exportToExcel函数?或者我需要弄清楚如何解析它?
答案 0 :(得分:0)
这是各种方法之一
让ActionMethod
返回Json
像:
[HttpPost]
public JsonResult GetOrders(DateTime startDate, DateTime endDate)
{
//your code
return Json(model.toList(),JsonRequestBehavior.AllowGet);
}
。对GetOrders
进行Ajax调用,如:
$.ajax({
type: "POST",
url: '@Url.Action("GetOrders")',
dataType: "json",
data: { startDate: startDate, endDate: endDate, catid: catid, prdId: prdId, brandId: brandId },
async: true,
success: function (data) {
var htmlhead = "<thead> <tr><th style=\"width:6%; text-align:center;\"> Quantity</th> <th style=\"text-align:center;margin-left:4%;\">UnitNet</th><th style=\"text-align:center;margin-left:4%;\">DueDate</th></tr> </thead>";
for (var i = 0; i < data.length; i++) {
htmlval = htmlval + ("<tr><td>" + data[i].Quantity + "</td><td style=\"text-align:center;\"> " + data[i].UnitNet + "</td><td style=\"text-align:center;\"> " + data[i].DueDate + "</td></tr>");
}
html = htmlhead + htmlval;
$("#table").html(html);
window.open('data:application/vnd.ms-excel,' + encodeURIComponent($('div[id$=dvData]').html()));
},
error: function (jqXHR, exception) {
console.log(jqXHR.responseText);
}
});
创建一个名为&#34; dvdata&#34;的div。和表格一样:
<div id="dvData" style="display:none;">
<table id="table"></table>
或者假设您在视图中有Html表,并且要在Excel中下载该表,然后查看this,this小提琴
或者您可以使用this插件