在剑道网格上获取空引用;如何确定引发错误的原因
本文关键字:何确定 错误 网格 获取 引用 | 更新日期: 2023-09-27 17:56:45
我有一个剑道网格,我主要从一位同事那里复制(区别在于他们使用不同的表格作为他们的来源)和他的作品。他使用动态源而不是模型。
当我访问该页面时,网格没有出现。ReadCustomerNotes 操作有一个包含数据的数据表,所以这不是问题所在。我添加了一个 try-catch 块,现在收到错误"无法对空引用执行运行时绑定"。
我在网上找不到任何处理此错误和使用动态源的剑道网格。如何找出空引用的位置?我可以在 catch 块中放入一些东西来显示导致错误的原因吗?
这是我的代码:
AdminCustomerNotes.cshtml
@{
ViewBag.Title = "AdminCustomerNotes";
}
@using (Html.BeginForm("AdminCustomerNotes", "Admin"))
{
@(Html.Kendo().Grid<dynamic>()
.Name("Grid")
.Columns(columns =>
{
foreach (System.Data.DataColumn column in Model.Columns)
{
switch (column.ColumnName)
{
case "customerNotes":
columns.Bound(column.ColumnName);
break;
}
}
})
.Pageable(x => x.PageSizes(new int[] { 10, 20, 30, 50 }).Refresh(true))
.Sortable()
.Filterable()
.Groupable()
.DataSource(dataSource => dataSource
.Ajax()
.Model(model =>
{
var id = Model.PrimaryKey[0].ColumnName;
model.Id(id);
})
.Read(read => read.Action("ReadCustomerNotes", "Admin", new { customerID = int.Parse(ViewBag.compId.ToString()) })))
.AutoBind(true)
)
}
catch (Exception ex)
{
@ex.Message;
}
}
管理员控制器.cs
public ActionResult ReadCustomerNotes([DataSourceRequest] DataSourceRequest request, int customerID)
{
var customerNotes = CustomerNotes(false, customerID);
return Json(customerNotes.ToDataSourceResult(request));
}
private DataTable CustomerNotes(bool init, int customerID)
{
try
{
return Rep.GetCustomerNotesByCustomerID(init ? 0 : customerID);
}
catch (Exception exception)
{
return null;
}
}
存储库.cs
public DataTable GetCustomerNotesByCustomerID(int customerID)
{
try
{
var dt = new DataTable();
dt.Columns.Add("customerNotesID", typeof(int));
dt.Columns.Add("customerNotesDate", typeof(string));
dt.Columns.Add("customerNotes", typeof(string));
dt.PrimaryKey = new[]
{
dt.Columns["customerNotesID"]
};
var qry =
from customerNotes in dat.tblCoNoteses
where (
customerNotes.CompId == customerID
)
select new
{
customerNotes.CoNotesId
, customerNotes.CompId
, customerNotes.Note
, customerNotes.AddBy
, customerNotes.AddDate
};
foreach (var itm in qry)
{
var row = dt.NewRow();
row["customerNotesID"] = itm.CoNotesId;
row["customerNotesDate"] = string.IsNullOrEmpty(itm.AddDate.ToString()) ? "" : DateTime.Parse(itm.AddDate.ToString()).ToShortDateString();
row["customerNotes"] = itm.Note;
dt.Rows.Add(row);
}
return dt;
}
catch (Exception exception)
{
return null;
}
}
我认为在您的foreach (System.Data.DataColumn column in Model.Columns)
语句中Model
为空。 Model
对视图顶部@model ...
的引用,而不是网格的模型。
你可以做这样的事情(还没有测试过):
行动
public ActionResult AdminCustomerNotes() {
var customerNotes = CustomerNotes(false, customerID);
return View("AdminCustomerNotes", customerNotes);
}
视图
@model DataTable
@(Html.Kendo().Grid(Model)
.Name("Grid")
.Columns(columns =>
{
foreach (System.Data.DataColumn column in Model.Columns)
{
switch (column.ColumnName)
{
case "customerNotes":
columns.Bound(column.ColumnName);
break;
}
}
})
.Pageable(x => x.PageSizes(new int[] { 10, 20, 30, 50 }).Refresh(true))
.Sortable()
.Filterable()
.Groupable()
)