基于属性的验证的一个优点是,一些框架(比如ASP.NET MVC/WebAPI)已经选定它作为验证接口。因为它是声明式的,所以可以与UI共享验证逻辑。
混合命令式和基于属性的验证
虽然理论上可以使用验证属性来完成所有工作,但有时候使用普通代码可以更容易地实现严格的验证。这样做的原因如下:
- 验证规则涉及多个属性
- 验证规则涉及子对象
-
验证规则不会被其他类或属性重用
命令式验证的一个缺点是它只存在于服务器端,无法像使用基于属性的验证一样自动与UI共享验证逻辑。
命令式验证的另一个限制是它需要使用共享接口,这样才能让应用程序的其余部分通过一致的方式触发验证。
空表单问题
当用户在创建新记录并未填写所有必填字段时,就会出现空表单问题。在显示表单时,你不希望看到每个字段都以红色突出显示。
为了解决这个问题,需要为模型提供两个额外的方法:
- 验证:跨所有字段执行验证,触发类似“required”这样的规则。










