4

我在局部视图中有两个 Kendo 网格定义,除了局部视图模型和网格项模型外,它们完全相同。只有其中一个在代码行上给了我 JavaScript 控制台错误“无法读取未定义的属性 'dataSource'”:

$("#index-grid").data("kendoGrid").dataSource.bind("change", function (e) {...})

而另一个没有。不是dataSource未定义,而是$("#index-grid").data("kendoGrid"). 然而,在另一个相同的网格中,我没有收到这个错误。提供给数据源的数据可能会使网格本身无效吗?网格定义如下所示:

@model TerminalIndexModel
@using Kendo.Mvc.UI
@using ParkPay.Helm.ViewModels
@(Html.Kendo().Grid<TerminalIndexItem>()
                .Name("index-grid")
                .Columns(columns =>
                            {
                                columns.Bound(p => p.Name);
                                columns.Template(@<text></text>).ClientTemplate("<input type='checkbox' #= IsActive ? checked='checked':'' # class='chkbx' />").Title("Active").Width(70);
                                columns.Bound(p => p.Remarks);
                                columns.Command(cmd => cmd.Destroy()).Width(80);
                            })
                .ToolBar(toolbar =>
                {
                    toolbar.Create();
                    toolbar.Save();
                })   
                .HtmlAttributes(new { style = "height: 480px;"})                                                        
                .Editable(editable => editable.Mode(GridEditMode.InCell))
                .Filterable()
                .Pageable()
                .Scrollable()
                .Sortable()
                .Resizable(resize => resize.Columns(true))
                .Reorderable(reorder => reorder.Columns(true))
                .DataSource(dataSource => dataSource
                                        .Ajax()
                                        .ServerOperation(false)
                                        .Batch(true)
                                        .PageSize(20)
                                        .Events(events => events.Error("kendoGridErrorHandler"))
                                        .Model(model => model.Id(p => p.Id))
                                        .Read(read => read.Action("Read", "Terminal"))
                                        .Update(update => update.Action("BatchUpdate", "Terminal"))
                                        .Create(create => create.Action("BatchCreate", "Terminal"))
                                        .Destroy(destroy => destroy.Action("BatchDelete", "Terminal"))
                            )
)

唯一的区别是TerminalIndexItemLocationIndexItem' and andTerminalIndexModel versusLocationIndexModel , and of course the controller names in the CRUD definitions,Terminal versusLocation`。我无计可施,无法找到两个网格之间的差异。

4

3 回答 3

4

两个网格的显示时间与问题行的执行时间有什么不同吗?意思是,对于有效的网格,是否有可能在行执行时已经初始化,而对于有问题的网格,它不是?

于 2013-06-13T13:23:25.400 回答
1

只是有同样的问题。

奇怪的是,即使在页面加载后启动了 javascript 代码(使用 $(function() {...})),似乎还不能从客户端访问网格。

解决方案:您需要在网格初始化 (@Html.Kendo.Grid(...)) 之后放置 javascript 代码块。

于 2018-02-28T15:18:46.400 回答
0

Kendo UI HtmlHelper Extension 的 Name() 用作id其相应 HTML 元素的 HTML 属性。该id属性在当前页面中必须是唯一的。如果您两次渲染相同的局部视图,则两个网格最终都会具有相同的id属性。结果,只有第一个网格将被初始化。确保页面中的所有 HTML 元素都具有唯一 ID。这可以通过在 Name() 中附加一些后缀来完成:

@(Html.Kendo().Grid<TerminalIndexItem>()
      .Name("index-grid" + ViewData["suffix"])

可以在呈现局部视图的操作方法中设置此后缀。

于 2013-06-12T19:27:41.180 回答