将DataTable从View传递给新的Controller方法

时间:2016-01-05 10:56:49

标签: c# asp.net-mvc razor datatable

我正在尝试将DataTable从视图传递到Controller中的方法。当我尝试从Controller访问DataTable时,我得到一个NullReference异常。

DataTable已填入视图中,我可以通过在视图中运行此代码来确认:

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

这将返回DataTable的列。当我尝试将此DataTable发送到Controller时:

<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时发生错误。

如何将ViewTable中的DataTable传递给新的Controller方法?

我已经看到有关此问题的其他帖子,到目前为止尚未得到答复,这可能是因为在这些情况下问题过于具体。我试着在这篇文章中进行更多概括。

1 个答案:

答案 0 :(得分:-1)

我有同样的情况。我使用TempDatadatatable从视图发送到控制器 希望这会对你有所帮助。

查看:

@{
    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");
}