我正在尝试将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方法?
我已经看到有关此问题的其他帖子,到目前为止尚未得到答复,这可能是因为在这些情况下问题过于具体。我试着在这篇文章中进行更多概括。
答案 0 :(得分:-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> 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");
}