【问题标题】:Kendo UI MVC Grid ViewModel Binding NullReferenceKendo UI MVC Grid ViewModel 绑定 NullReference
【发布时间】:2016-05-11 13:36:02
【问题描述】:

我正在使用 Kendo UI Grid 并尝试在我的视图模型中绑定到 List<T>。不幸的是,我在Model.DeliveredLoads 上不断收到NullReferenceException。我在控制器中设置了断点,在调试时,控制器方法没有被加载,断点也没有被命中。

看起来好像网格在视图模型中可用数据之前尝试绑定,因此出现错误。

这是我的 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>

由于我将数据放入视图模型(并且没有预料到大量数据 - 通常不超过 30 行),我不明白为什么需要 Json 方法来加载/页面/排序数据。

我只是不明白为什么网格似乎在模型完全水合之前试图绑定。

任何想法或建议将不胜感激!

谢谢, 瑞克

【问题讨论】:

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


    【解决方案1】:

    它不是那样工作的。在初始化网格时,您是说网格将使用模型“Model.DeliveredLoads”。它仅用于模型绑定。那时它不会有数据。您必须调用网格的读取方法。那么这意味着您将从控制器的 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>
    

    【讨论】:

      猜你喜欢
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 2015-05-13
      相关资源
      最近更新 更多