You need to enable JavaScript to run this app. ASP.NET Kendo Grid 展开子明细时数据错误绑定到非目标父行
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Kendo Grid 展开子明细时数据错误绑定到非目标父行

串位问题的核心原因

Kendo UI 组件初始化时会通过Name属性生成对应的DOM ID和组件实例索引,同一页面绝对不能出现两个及以上相同Name的Kendo组件。
你现在把明细模板里的TabStrip、嵌套明细Grid的Name都写成了固定值,不管模板被渲染到第一行还是第二行的展开区,Kendo初始化、发请求、绑定数据的时候,永远只会匹配到第一个被挂载的同名组件——这就是为什么第二行的请求拿到的明细,全被塞到第一行的展开框里,覆盖了第一行本来的内容,第二行自己的展开区反而空了。
另外你现有代码里还有个低级语法错误:TabStrip的Name属性值漏了闭合引号,会让模板解析直接出问题。

实际改法
  • 把明细模板里所有硬编码的组件名,用当前主行的唯一字段动态拼接成唯一值,借Kendo模板语法#= 字段名 #取主行标识(就用你现有的PersonName字段就行,只要不重复),保证每个行展开区里的组件名全页面不重复:
    • 修复TabStrip写法:补上漏掉的闭合引号,把固定Name改成动态值
      原错误写法:Name("tabStrip_detail)
      修改后:Name("tabStrip_detail_#= PersonName #")
    • 调整嵌套明细Grid的写法:把固定的Name("grid_person")改成动态值
      修改后:Name("grid_person_#= PersonName #")
  • 翻一遍项目里后续操作这些明细Grid的JS代码,别直接用$("#grid_person")这种固定选择器找组件,要从当前点击行的DOM容器范围里找对应的明细组件,不然就算解决了组件重名问题,后续操作还是会串。
  • 你现在写的明细Grid数据源传参逻辑(用#=Person#把当前主行的人员名传到后端当查询参数)是对的,只要解决了组件重名的问题,每个行的明细Grid都会独立发请求、渲染到自己所在的展开区,不会再出现数据覆盖。

内容的提问来源于stack exchange,提问作者JerseyDuke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 09:24:04