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

本文关键字:Controller 方法 DataTable View | 更新日期: 2023-09-27 18:28:58

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

DataTable被填充在视图中,我可以通过在视图中运行以下代码来确认:

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

这将返回DataTable的列。当我尝试将此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方法?

我看到过其他关于这个问题的帖子,到目前为止还没有得到回复,这可能是因为在这些情况下,这个问题太具体了。我试着在这篇文章中概括更多。

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

我也有同样的情况。我使用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");
}