将新数据加载到网格后,我遇到了Kendo网格寻呼机行为不端的问题 . 页面加载时加载网格,配置如下:
@(Html.Kendo().Grid<MyModel>()
.Name("Grid")
.Columns(columns =>
{
//snipped
})
.Scrollable()
.Sortable(sort => sort.Enabled(true))
.Pageable(pager => pager.PageSizes(new int[] {10, 25, 50, 100}))
.Events(events => events.DetailExpand("detailExpand").DetailCollapse("detailCollapse").DataBinding("onDataBinding"))
.ClientDetailTemplateId("template")
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Sort(sort => sort.Add(Model.sort).Order(Model.Direction))
.PageSize(Model.PageSize)
.Events(events=>events.Error("onError"))
.Read(read => read.Action("Summary", "Summary").Data("getFilterModel")))
.Events(events => events.DataBound("dataBound"))
.Resizable(resize => resize.Columns(true))
.Reorderable(reorder => reorder.Columns(true))
);
我在页面上有一些控件作为网格内容的过滤器 . getFilterModel函数返回这些过滤器的值 . 当用户单击“过滤器”按钮时,我调用网格数据源上的读取 .
<button class="k-button" id="get" type="button" onclick="$('#Grid').data('kendoGrid').dataSource.read();return false;">Filter</button>
这在初始页面加载时工作正常,如果我重新加载网格的行数<=原始行数 . 如果我使用更多行重新加载,则寻呼机显示正确的计数 . 但是,如果我尝试单击以前进到下一页,则寻呼机将恢复为仅显示1页,并且网格显示为空 .
示例:初始加载包含3条记录,页面大小为25. Pager显示1页 . 好 . 更改过滤器,以便网格加载42行 . 寻呼机显示2页,设置为第1页,“1-25项中的1-25” . 点击进入第2页;网格显示没有行,寻呼机显示1页和“26-25 of 25 items”
是否需要以某种方式明确重置寻呼机?
这是Kendo MVC的旧版本... DLL显示版本2013.3.1119.340 .
1 回答
在这种情况下,剑道MVC和我超越自己 .
getFilterModel
函数返回了一个包含Page
和PageSize
属性的对象,这些属性将转换为HTTP请求中的查询参数名称 . 这些又成为FilterModel对象的属性,FilterModel对象是控制器动作的模型 . 在服务器端,控制器操作调用KendoToDataSourceResult
扩展方法,该方法显然解释Page
和PageSize
并且仅返回结果的第一页 .将这些属性的名称更改为
GridPage
和GridPageSize
解决了该问题 . 我把它们包括在内是因为我想把它们作为网格状态的一部分来保留,但是我可能最好找到另一种方法来做到这一点 .