2016-01-05 198 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

相关问题