2016-01-05 197 views
2

我想從視圖傳遞數據表到控制器中的方法。當我嘗試從Controller訪問DataTable時,我得到一個NullReference異常。從視圖傳遞數據表到新的控制器方法

DataTable中填充的觀點,我可以通過在視圖中運行此代碼確認:

@{ 
    Debug.WriteLine("########DATATABLE COLUMNS########"); 
    foreach (DataColumn column in Model.Columns) { 
     Debug.WriteLine(column.ToString()); 
    } 
} 

這將返回DataTable的列。當我嘗試發送此數據表的控制器:

<a href="@Url.Action("expExcel", "Home", new {dt = Model})">export to excel...</a> 

在控制器的方法:

public ActionResult expExcel(DataTable dt) { 
    Debug.WriteLine("########DATATABLE COLUMNS########"); 
    foreach (DataColumn column in Model.Columns) { 
     Debug.WriteLine(column.ToString()); 
    } 
    //some more code... 
} 

原因此錯誤:

System.NullReferenceException 

當我嘗試存取權限的發生的錯誤DataTable dt。

如何將DataTable從視圖傳遞到新的Controller方法?

我已經看到關於這個問題的其他帖子,到目前爲止還沒有答案,這可能是因爲這些問題在這些情況下太具體。我在這篇文章中試圖推廣更多。

+3

你不能像這樣從視圖中發送數據表的行動。我使用一個列表這個purpuse和發送數據的表單。 – Mashtani

+1

@ Janneman96你可以爲你的視圖顯示你的GET操作方法嗎?將DataTable作爲你的模型是很奇怪的。它應該是這樣的http://www.c-sharpcorner.com/UploadFile/rahul4_saxena/export-data-table-to-excel-in-Asp-Net-mvc-4/,對於模型使用IEnumerable 。 – stenlytw

+0

@bounces謝謝,這看起來像我需要的解決方案,我現在要嘗試。 – Janneman96

回答

-1

我有同樣的情況。我使用TempData將我的datatable從視圖發送到控制器。
希望這可以幫助你。

查看:

@{ 
    if (Model.LedgerTable.Rows.Count > 0) 
    { 
     TempData["data"] = Model.LedgerTablelist(Model.LedgerTable); 
     TempData["datatable"] = Model.LedgerTable; 

     <a href="@Url.Action("ExportToExcel", Model)" data-example-id="" class="btn btn-info" id="excelbtn"><i class="fa fa-download" aria-hidden="true"></i>&nbsp;Download</a> 
    } 
} 

控制器:

public FileContentResult ExportToExcel(LedgerDetails obj) 
{ 
    //LedgerDetails obj = new Models.LedgerDetails(); 
    if (TempData["data"] != null) 
    { 
     List<LedgerData> liobj = new List<LedgerData>(); 
     liobj = (List<LedgerData>)TempData["data"]; 
    } 
    if (TempData["datatable"] != null) 
    { 
     obj.LedgerTable = (DataTable)TempData["datatable"]; 
    } 

    byte[] filecontent = Models.LedgerDetails.ExportExcel(obj.LedgerTable,obj); 
    return File(filecontent, Models.LedgerDetails.ExcelContentType, "LedgerDetails.xlsx"); 
} 
+1

請格式化您的代碼。縮進似乎到處都是 – lebelinoz

相關問題