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

Kendo Telerik MVC子网格绑定后无法更新InternVM模型求助

问题分析与解决方案

首先得明确问题出在哪:你用EditorTemplate实现的子网格是独立的Kendo Grid组件,它的增删改操作都是通过自己的DataSource单独提交请求的,并不会自动把修改后的数据同步到主网格绑定的InternVM.Schedules属性里。当你提交主网格的更新时,Kendo只会收集主网格列绑定的字段值,完全没把子网格的修改数据带上,所以后端的InternVM模型自然得不到更新后的Schedules数据。

下面给你两种可行的解决思路,选哪种看你业务场景:

方法1:主网格提交前同步子网格数据

在主网格执行保存操作的瞬间,手动把当前子网格的所有最新数据提取出来,赋值给主模型的Schedules字段,这样主网格的Update请求就会带上完整的最新数据。

具体步骤:

  1. 给主网格添加Save事件监听:
@(Html.Kendo().Grid<InternVM>()
    // ... 其他配置
    .Events(e => {
        e.BeforeEdit("onBeforeEdit");
        e.Save("onMainGridSave"); // 新增这个事件绑定
    })
)
  1. 编写onMainGridSave函数:
function onMainGridSave(e) {
    // 获取子网格实例
    const scheduleGrid = $("#InternScheduleGrid").data("kendoGrid");
    if (!scheduleGrid) return;

    // 获取子网格的所有数据(转成JSON格式方便赋值)
    const latestSchedules = scheduleGrid.dataSource.data().toJSON();
    // 把最新数据赋值给主模型的Schedules字段
    e.model.set("Schedules", latestSchedules);
}

这样,当你点击主网格的"更新"按钮时,会先同步子网格的最新数据到主模型,再提交请求,后端就能拿到完整的InternVM对象了。

方法2:子网格操作后实时同步主模型

另一种思路是,每当子网格完成增删改操作,就立刻把最新数据同步到当前编辑的主模型里,确保主模型始终和子网格数据保持一致。

修改子网格的onRequestEnd函数:

function onRequestEnd(e) {
    if (e.type == "update" || e.type == "create" || e.type == "remove") {
        // 重新加载子网格数据确保是最新的
        const scheduleGrid = $("#InternScheduleGrid").data("kendoGrid");
        scheduleGrid.dataSource.read();

        // 获取主网格当前编辑的模型
        const mainGrid = $("#InternGrid").data("kendoGrid");
        const editedMainModel = mainGrid.editable.model;
        if (!editedMainModel) return;

        // 把最新的子网格数据同步到主模型
        const latestSchedules = scheduleGrid.dataSource.data().toJSON();
        editedMainModel.set("Schedules", latestSchedules);
    }
}

这种方式下,子网格每做一次操作,主模型的Schedules就会立刻更新,后续主网格提交时自然就是最新数据了。

额外注意点

  • 后端的Update接口要做好Schedules的处理逻辑:比如对比原有数据和新提交的数据,处理新增、修改、删除的条目,不要直接覆盖(除非你的业务就是完全替换)。
  • 如果子网格的InternScheduleID是后端自增生成的,要确保子网格Create后,新生成的ID能同步到主模型里(上面的方法已经通过重新读取子网格数据解决了这个问题)。
  • 因为你用的是InLine编辑,只有主网格进入编辑状态时才会渲染子网格,所以要确保getParentId能正确拿到当前编辑的InternId,你的现有代码已经处理了这部分,没问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:25:46