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 #")
- 修复TabStrip写法:补上漏掉的闭合引号,把固定Name改成动态值
- 翻一遍项目里后续操作这些明细Grid的JS代码,别直接用
$("#grid_person")这种固定选择器找组件,要从当前点击行的DOM容器范围里找对应的明细组件,不然就算解决了组件重名问题,后续操作还是会串。 - 你现在写的明细Grid数据源传参逻辑(用
#=Person#把当前主行的人员名传到后端当查询参数)是对的,只要解决了组件重名的问题,每个行的明细Grid都会独立发请求、渲染到自己所在的展开区,不会再出现数据覆盖。
内容的提问来源于stack exchange,提问作者JerseyDuke
相关产品推荐
相关产品推荐

