Kendo嵌套网格启用编辑时出现‘Name cannot be blank’错误
问题分析与解决方案
核心问题
你遇到的「Name cannot be blank」错误,根源是嵌套网格的DataSource未配置Model主键,且创建子项时未关联父项的ExceptionId外键。Kendo UI Grid在启用批量编辑、InCell模式时,必须明确指定Model的主键字段,否则框架会尝试寻找默认主键(如Name字段),引发验证错误。
修复步骤
1. 恢复嵌套网格的DataSource Model配置
在嵌套网格的DataSource中取消注释Model配置,指定主键为ExceptionReportsModelId:
.DataSource(dataSource => dataSource .Ajax() .Batch(true) .ServerOperation(false) .Read(read => read.Action("Hierarchy_ModelRead", "Models", new { ExceptionId = "#=ExceptionId#" })) .Update(update => update.Action("Hierarchy_ModelUpdate", "Models", new { ExceptionId = "#=ExceptionId#" })) .Create(create => create.Action("Hierarchy_ModelCreate", "Models", new { ExceptionId = "#=ExceptionId#" })) .Destroy(delete => delete.Action("Hierarchy_ModelDelete", "Models", new { ExceptionId = "#=ExceptionId#" })) .Model(model => { model.Id(x => x.ExceptionReportsModelId); }) )
2. 修复子项创建的外键关联
在Hierarchy_ModelCreate控制器方法中,为新创建的ExceptionReportsModels设置ExceptionId,确保子项关联到对应的父项:
public async Task<ActionResult> Hierarchy_ModelCreate(Guid ExceptionId, [DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")] IEnumerable<ModelException> vMs) { if (vMs != null) { foreach (var ex in vMs) { var create = new Persistence.Models.ExceptionReportsModels(); create.ValueForReport = ex.ReportValue; create.Model = ex.Model; create.ExceptionId = ExceptionId; // 添加这行,关联父项ID _db.ExceptionReportsModels.Add(create); } await _db.SaveChangesAsync(); } return Json(vMs.ToDataSourceResult(request)); }
3. 验证批量提交的绑定前缀
确认控制器方法中的[Bind(Prefix = "models")]是否与嵌套网格的名称匹配。嵌套网格的名称是grid_#=ExceptionId#,批量提交时的前缀应为grid_#=ExceptionId#,但由于是动态名称,Kendo UI会自动处理,不过如果仍有问题,可以尝试去掉[Bind(Prefix)],直接接收IEnumerable<ModelException>参数。
额外检查
- 确保父网格和嵌套网格的
Batch(true)配置正确,批量编辑需要后端支持批量处理集合参数。 - 检查浏览器控制台是否有其他JS错误,排除前端脚本冲突。
内容的提问来源于stack exchange,提问作者9Snick4
相关产品推荐
相关产品推荐

