Kendo DropDownList始终向控制器传递相同值问题咨询
嗨,我来帮你搞定这个Kendo DropDownList总是传相同值的问题!结合你给出的子网格代码片段,大概率是模板渲染时的ID冲突或者绑定上下文出了问题,下面给你一步步拆解排查方向和解决办法:
可能的原因与解决方案
1. 子网格中DropDownList的ID重复问题
因为子网格是通过模板循环渲染的,如果每个DropDownList的Name/ID是固定值,就会导致DOM元素ID重复——浏览器只会识别第一个实例,后续所有行的DropDownList都会复用第一个的值。
- 解决办法:给DropDownList的Name属性加上子网格的唯一标识(比如你的
#=acrpr_id#),确保每个实例的标识唯一:
columns.ForeignKey(c => c.acr_function, StaticList...) .EditorTemplateName("CustomFunctionDropDown") .ClientTemplate("#: acr_functionText #"); // 显示文本用客户端模板
在对应的编辑器模板(CustomFunctionDropDown.cshtml)里,动态生成Name:
@(Html.Kendo().DropDownList() .Name("acr_function_#=acrpr_id#") // 用子网格的唯一ID做后缀,避免重复 .DataTextField("Text") .DataValueField("Value") .BindTo(ViewBag.FunctionOptions) )
2. 模型绑定的上下文丢失问题
子网格的行数据没有正确关联到当前编辑行的模型,导致提交时总是取到第一行的DropDownList值。
- 解决办法:确保子网格的DataSource正确配置主键,并且编辑时强制绑定当前行的模型值:
.DataSource(dataSource => dataSource .Ajax() .Model(model => model.Id(p => p.acp_id)) // 必须设置主键,确保行数据唯一 .Update(update => update.Action("UpdateAccrualDetail", "YourController")) ) .Events(events => events.Edit("onSubGridEdit")) // 绑定编辑事件
对应的JS函数,手动同步DropDownList和当前行模型:
function onSubGridEdit(e) { // 通过前缀匹配找到当前行的DropDownList var dropdown = e.container.find("[name^='acr_function']").data("kendoDropDownList"); if (dropdown) { dropdown.value(e.model.acr_function); // 强制绑定当前行的模型值 } }
3. 静态列表的缓存或动态适配问题
如果你的StaticList是页面加载时一次性绑定的,没有根据子网格行的不同做动态调整,也可能导致值异常。
- 解决办法:如果不同行的DropDownList选项需要差异化,在编辑事件里重新拉取对应数据源:
function onSubGridEdit(e) { var dropdown = e.container.find("[name^='acr_function']").data("kendoDropDownList"); // 根据当前行的acrpr_id请求对应的选项列表 $.get("/YourController/GetFunctionOptions?acrprId=" + e.model.acrpr_id, function(data) { dropdown.setDataSource(data); dropdown.value(e.model.acr_function); }); }
额外检查点
- 打开浏览器F12开发者工具,切换到Network标签,查看提交请求的FormData,确认
acr_function字段值是否真的重复; - 检查子网格每一行的DropDownList DOM元素,确认它们的
name属性是唯一的; - 核对模型类
AccrualProfileDetailsModel中的acr_function字段,确保没有被[NotMapped]等特性影响绑定。
内容的提问来源于stack exchange,提问作者Nahuel Leiva
相关产品推荐
相关产品推荐

