C#中NotMapped字段值为null时Setter方法未触发问题问询
根本原因
- Kendo控件提交逻辑限制:当控件内所有条目被清空时,默认不会在POST请求中携带
ExecuteTimes对应的参数。ASP.NET MVC/Core的模型绑定器找不到对应提交值时,会直接跳过该属性的赋值流程,自然不会触发Setter方法。 - 集合类型的默认绑定规则:即便请求中携带了空的
ExecuteTimes参数,模型绑定器对集合类型的空输入默认判定为「无有效赋值需求」,不会主动给集合属性赋值null,只会保留属性的原有默认值,因此也不会调用Setter。 - 你将字段改为
IList<int?>未解决问题的原因是,该改动仅调整了集合内部元素的可空性,不会改变模型绑定器对集合类型整体为空时的赋值逻辑,因此不生效。
验证方法
你可以在控制器的Action入口处,手动给接收到的模型实例的ExecuteTimes属性赋值null,此时Setter的断点必然会命中,可排除属性本身的Setter语法问题。
可选修复方案(若需要清空时触发逻辑)
可以在页面添加一个与ExecuteTimes绑定的隐藏字段,用JS监听Kendo控件的内容变化,当控件内容为空时主动给隐藏字段赋值空数组标识,确保请求中始终携带ExecuteTimes的参数,即可触发模型绑定的赋值逻辑。
内容的提问来源于stack exchange,提问作者John Lord
相关产品推荐
相关产品推荐

