ASP.NET MVC Kendo Grid折叠带聚合分组时抛出异常求助
问题描述
使用ASP.NET MVC的Kendo Grid展示数据库数据,已配置分组功能,并为double类型字段Summa添加了Sum聚合函数。分组及聚合计算均正常,但在折叠分组时抛出如下异常:
Uncaught TypeError: Cannot read properties of undefined (reading 'hasSubgroups') at init.groupCount (kendo.all.js:313050:21) at init._calculateGroupsTotal (kendo.all.js:313050:21) at init.collapseGroup (kendo.all.js:313050:21) at t._groupableClickHandler.t._groupableClickHandler (kendo.all.js:313050:21) at HTMLTableElement.dispatch (jquery.min.js:3:12445) at r.handle (jquery.min.js:3:9174)
参照Telerik官方示例配置,且了解到这是已知Bug但未找到解决方案,Grid代码如下:
@(Html.Kendo().Grid<DTRows>() .Name("newMainGrid") .Columns(columns => { columns.Bound(c => c.FileName).Title("Имя файла").Width("200px").HideOnGroup(false); columns.Bound(c => c.Summa).Title("Стоимость").Width("100px").HideOnGroup(false) .ClientGroupHeaderTemplate("Сумма1 : #=sum#") .ClientGroupHeaderColumnTemplate("Сумма2 : #=sum#"); }) .Groupable() .Pageable() .Scrollable(scr => scr.Height(600)) .Reorderable(reorder => reorder.Columns(true)) .DataSource(dataSource => dataSource .Ajax() .Aggregates(aggregates => { aggregates.Add(p => p.Summa).Sum(); }) .GroupPaging(true) .Read(read => read.Action("dt_read", "Home")) .PageSize(100) ) )
疑问:哪里配置有误?能否手动修复,或有其他实现分组与聚合的方案?
解决方案
1. 核心配置问题:禁用GroupPaging
你配置中的GroupPaging(true)是触发错误的核心原因。该特性结合列级聚合模板时,会导致Kendo Grid在折叠分组时无法正确识别分组层级的元数据(如hasSubgroups属性),从而抛出未定义错误。
临时修复方案:将GroupPaging(true)改为GroupPaging(false),关闭分组分页功能,此时折叠分组逻辑会恢复正常。
修改后的DataSource配置片段:
.DataSource(dataSource => dataSource .Ajax() .Aggregates(aggregates => { aggregates.Add(p => p.Summa).Sum(); }) // 注释或移除分组分页配置 // .GroupPaging(true) .Read(read => read.Action("dt_read", "Home")) .PageSize(100) )
2. 手动修复Kendo JS源码(紧急场景用)
如果必须保留分组分页,可针对kendo.all.js中的报错方法做临时补丁:
找到groupCount方法,新增空值校验逻辑:
groupCount: function(e) { // 新增空值判断,避免读取undefined属性 if (!e || !e.hasSubgroups) return 0; // 原有业务逻辑... }
注意:该方法仅适用于紧急场景,升级Kendo版本时需要重新修改,且可能引发其他未知问题。
3. 替代方案:后端计算聚合值
放弃前端聚合,转移到后端接口dt_read中直接返回分组后的聚合结果:
- 在后端方法中,根据分组字段(如
FileName)执行分组逻辑,计算每个组的Summa总和。 - 将分组结果封装为包含分组键、聚合值、子数据的结构返回给前端。
- Grid配置中移除前端聚合和分组分页,直接渲染后端返回的分组结构。
该方案彻底规避前端Bug,且聚合计算转移到数据库/后端,性能更优。
4. 升级Kendo版本
该Bug在较新的Kendo UI稳定版本中已被修复,建议优先升级到官方最新版本,通过版本迭代解决问题。
内容的提问来源于stack exchange,提问作者lcnw
相关产品推荐
相关产品推荐

