ASP.NET Core 8 MVC子类属性POST未回传及ModelState验证失效问题
ASP.NET Core 8 MVC子类属性绑定失败及验证不触发问题解决
问题根源
- ASP.NET Core MVC的模型绑定系统仅处理带get/set访问器的属性,你ViewModel中的
subClass1是字段(无get/set),导致其下的user.email_addr无法被绑定到模型实例。 - ModelState验证仅扫描属性的子成员,字段的子属性不会触发任何验证逻辑。
解决方案
将ViewModel中的subClass1字段改为属性,添加get/set访问器即可:
public class ViewModel { public string test { get; set; } = "test value"; // 从字段改为属性,添加get/set访问器 public User subClass1 { get; set; } = new User(); }
User和UserL类无需修改,保持原有结构即可。
效果说明
修改后:
- HTTP Post请求中的
subClass1.user.email_addr值会正确绑定到ViewModel实例的对应属性。 [CustomEAttribute]的验证逻辑会正常触发,ModelState会包含该属性的验证结果。
你之前看到IFormCollection中有对应值,是因为IFormCollection直接读取表单提交的键值对,不依赖模型绑定的属性规则,但模型绑定系统只会处理带有get/set的属性成员。
内容的提问来源于stack exchange,提问作者narue1992
相关产品推荐
相关产品推荐

