You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:19:55