2016-07-27 35 views
0

私は動的に生成されたHTMLテーブルを持っています。私は、ユーザーが提供するdaterangeに基づいてOrderViewModelリストオブジェクトを返すActionResultメソッド "GetOrders"を持っています。テーブルをレンダリングした後、そのデータをExcelファイルにエクスポートする2番目のアクションメソッドが必要です。HTMLテーブルをExcelにエクスポート

質問:私は、データセット/ gridviewにレンダリングされるHTMLテーブルを解析する必要がありますか、または元の "GetOrders"アクションメソッドでクエリされているデータを保存する方法がありますか?そうすれば、私はそれを輸出用の第2の関数に渡すことができます。私は..

[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 を返すように様々な方法 の一つである:ようなGetOrdersへのAjax呼び出し

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

.Make:

$.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でそのテーブルをダウンロードする必要があるとし、その後thisthisフィドル

か、thisプラグイン

を使用することができますを参照してください
関連する問題