ASP.NET MVC中Kendo UI Grid获取Project列筛选值自动填充新增弹窗
实现方案
该需求完全可以实现,不需要改动现有Kendo Grid的核心配置,直接利用你已经为Grid绑定的Edit("onPopOpen")弹窗事件钩子就能完成。
实现逻辑
- 弹窗打开时先判断当前操作是否为新增记录模式,编辑存量数据时跳过自动填充逻辑,避免覆盖原有行的绑定值
- 从Grid数据源的当前筛选规则中,提取Project列(对应绑定字段
ProjectID_FK)的筛选取值 - 将提取的取值同步写入新增记录的模型字段,同时更新弹窗内Project下拉框的选中状态,保证数据和界面显示一致
- 全流程增加边界判断:无任何筛选、未针对Project列设置筛选的场景直接放行,不干扰原有功能
具体代码
补全你已经预留的onPopOpen函数即可:
function onPopOpen(e) { // 仅处理新增场景,编辑已有数据时不执行自动填充 if (!e.model.isNew()) { return; } // 获取当前Grid实例 const grid = $("#grid").data("kendoGrid"); // 读取Grid当前生效的筛选规则 const currentFilter = grid.dataSource.filter(); // 无有效筛选时直接跳过 if (!currentFilter?.filters?.length) { return; } // 匹配Project列的筛选规则 const projectFilter = currentFilter.filters.find(item => item.field === "ProjectID_FK"); // 未对Project列设置筛选时直接跳过 if (!projectFilter) { return; } const targetProjectId = projectFilter.value; // 给新增的空模型赋值Project字段 e.model.set("ProjectID_FK", targetProjectId); // 同步弹窗内Project下拉框的选中状态 const projectDropDown = e.container.find("[name='ProjectID_FK']").data("kendoDropDownList"); if (projectDropDown) { projectDropDown.value(targetProjectId); // 如果需要强制用户在新增时不能修改Project的选择(适配快速新增同项目收件人的场景),打开下面注释即可 // projectDropDown.enable(false); } }
适配说明
- 你当前配置的是行内筛选模式,且关闭了多条件筛选按钮,Project列的筛选本身为单值精确匹配,不需要额外处理复杂多条件筛选的分支逻辑
- 所有逻辑均有兜底判断,不会影响原有编辑、新增、筛选、分页、排序的正常运行
内容的提问来源于stack exchange,提问作者ShowJX1990
相关产品推荐
相关产品推荐

