2016-07-27 4 views
0

У меня динамически сгенерированная таблица HTML. У меня есть метод ActionResult «GetOrders», который возвращает объект списка OrderViewModel на основе данных, предоставленных пользователем. После рендеринга таблицы я хотел бы иметь второй метод действий, который экспортирует эти данные в файл excel.Экспорт таблицы HTML в Excel

Мой вопрос: должен ли я анализировать таблицу HTML, которая отображается в виде набора данных/gridview, или есть способ сохранить данные, которые запрашиваются в исходном методе действий 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()); 
    } 

Есть ли способ, чтобы «захватить» эти данные и передать его во вторую функцию exportToExcel ? Или мне нужно выяснить, как его разобрать?

ответ

0

Это один из различных методов сделать ваш ActionMethod вернуть Json как:

[HttpPost] 
public JsonResult GetOrders(DateTime startDate, DateTime endDate) 
{ 
//your code 
return Json(model.toList(),JsonRequestBehavior.AllowGet); 
} 

.Make вызов Ajax для GetOrders как:

$.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); 

      } 
     }); 

ли создать DIV с именем «dvdata» и таблица типа:

<div id="dvData" style="display:none;"> 

<table id="table"></table> 

Или предположим, что у вас есть Html таблицу с вашей точки зрения, и вы хотите, чтобы загрузить эту таблицу в Excel затем увидеть this, this скрипку

Или Вы можете использовать плагин this

Смежные вопросы