如何通过JS程序化修改Telerik MVC服务端网格分页下拉值并触发刷新
解决Telerik MVC服务端网格程序化修改页大小并触发刷新的问题
我之前也踩过这个坑,Telerik的服务端网格在处理分页页大小变更时,光修改下拉框的值是不够的,必须要触发组件的内部事件或者直接联动数据源才能让网格刷新。你之前的几种方法没生效,主要是因为没触发关键的刷新逻辑,下面给你两种靠谱的解决方案:
方法一:通过分页下拉框组件触发变更
这种方法直接操作页大小选择器的Kendo DropDownList组件,核心是手动触发change事件,因为服务端网格依赖这个事件来发起数据刷新请求:
// 获取页大小选择器的DropDownList实例 var pageSizeDropDown = $(".k-pager-sizes select").data("kendoDropDownList"); // 设置目标页大小(确保这个值是下拉框里存在的选项值) pageSizeDropDown.value(userPreferencePageSize); // 关键步骤:手动触发change事件,通知网格刷新 pageSizeDropDown.trigger("change");
方法二:直接操作网格数据源(更稳妥)
这种方法绕过分页器,直接操作网格的数据源,更不容易出问题,适合需要精准控制的场景:
// 替换成你的网格ID,比如你网格的HTML元素ID是"ProductGrid" var grid = $("#YourGridID").data("kendoGrid"); // 设置数据源的页大小 grid.dataSource.pageSize(userPreferencePageSize); // 触发网格刷新(回到第一页,避免页大小变更后当前页超出总页数的情况) grid.dataSource.page(1);
为什么你之前的方法无效?
- 第一种方法只设置了DropDownList的value,但没有触发组件的
change事件,Telerik的服务端网格没有收到变更通知,自然不会发起新的请求。 - 第二种方法单独调用
pager.pageSize(),但服务端网格的分页逻辑是和数据源绑定的,分页器本身不会主动同步数据源的设置,所以网格不会刷新。 - 第三种方法用jQuery直接修改DOM的选中状态,完全没有触达Telerik组件的内部逻辑,组件根本不知道值已经改变了。
注意事项
- 确保代码在网格初始化完成后执行,比如放在
$(document).ready()回调里,或者网格的dataBound事件中。 userPreferencePageSize必须是下拉框中已经存在的有效值(比如10、20、50这类预设值),否则组件会忽略这个设置。
内容的提问来源于stack exchange,提问作者qubits
相关产品推荐
相关产品推荐

