Kendo UI MVC Grid ViewModel绑定NullReference

时间:2016-05-11 13:36:02

标签: asp.net-mvc razor data-binding kendo-grid asp.net-mvc-viewmodel

我正在使用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

1 个答案:

答案 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>