我正在使用Kendo UI Grid并尝试绑定到我的View模型中的List<T>
。不幸的是,我在NullReferenceException
上不断收到Model.DeliveredLoads
。我在控制器中设置了一个断点,在调试时,控制器方法没有加载,断点也没有被命中。
似乎网格在视图模型中可用的数据之前尝试绑定,因此出现错误。
这是我在ViewModel.cs文件中的内容:
using System.Collections.Generic;
using SmartAppData;
using SmartAppData.Services;
namespace SmartAppV1.Models
{
public class DispatchBoardViewModel
{
public List<OrdHeader> OrderHeaders
{
get
{
var service = new OrderService();
var orders = service.GetOrders();
return (List<OrdHeader>)orders;
}
}
public OrderTmsStatus OrderTmsStatus => new OrderTmsStatus();
private string _defaultOrderTmsStatus;
public string DefaultOrderTmsStatus
{
get { return OrderTmsStatus.Planned.ToString(); }
set { _defaultOrderTmsStatus = value; }
}
public List<Load> DeliveredLoads { get; set; }
}
}
我的控制器操作:
public ActionResult DispatchBoard()
{
var service = new OrderService();
var loadService = new LoadService();
var viewModel = new DispatchBoardViewModel();
viewModel.DefaultOrderTmsStatus = OrderTmsStatus.New.ToString();
// Get list of delivered loads (grid #4)
viewModel.DeliveredLoads = loadService.GetLoadsByBookedByIdByTmsStatus(110, LoadTmsStatus.Delivered.ToString());
return View(viewModel);
}
最后,我的观点是:
@model SmartAppV1.Models.DispatchBoardViewModel
<div class="section group">
<div id="col4" class="col span_1_of_4 fullContainerHeight">
<div class="commandBar">
<i class="fa fa-expand fa-inverse floatRight clickPointer" onclick="expandColumn(this);"></i>
</div>
@(Html.Kendo().Grid(Model.DeliveredLoads)
.Name("Grid_4_of_4")
.Columns(columns =>
{
columns.Bound(p => p.LoadId).Title("Load Id");
})
.Pageable()
)
)
</div>
</div>
由于我将数据放入View Model(而不是预期大量数据 - 通常不超过30行),我不明白为什么需要Json方法加载/分页/排序数据。
我只是不明白为什么网格似乎试图在模型完全水合之前绑定。
非常感谢任何想法或建议!
谢谢, RIC
答案 0 :(得分:0)
它没有那样的工作。在初始化网格时,您说网格将使用模型&#39; Model.DeliveredLoads&#39;。它只适用于模型绑定。它当时没有数据。您必须为网格调用read方法。那么这意味着您将从控制器读取读取方法中的数据。
@model SmartAppV1.Models.DispatchBoardViewModel
<div class="section group">
<div id="col4" class="col span_1_of_4 fullContainerHeight">
<div class="commandBar">
<i class="fa fa-expand fa-inverse floatRight clickPointer" onclick="expandColumn(this);"></i>
</div>
@(Html.Kendo().Grid(Model.DeliveredLoads)
.Name("Grid_4_of_4")
.Columns(columns =>
{
columns.Bound(p => p.LoadId).Title("Load Id");
})
.Pageable()
.DataSource(dataSource => dataSource.Ajax().Read(read => read.Action("ActionName", "ControllerName")))
)
</div>