Asp.net mvc 输入验证与模型验证

Asp.net mvc 输入验证与模型验证,asp.net-mvc,validation,Asp.net Mvc,Validation,今天我遇到了一个问题,在这个问题上,我用于模型绑定的属性之一是一个带有[必需]属性的整数。然而,ModelBinder很高兴跳过它,因为我错误地没有在视图中为它提供表单。当我修好它时,它工作得很好 然后我读了这篇文章,但无法真正理解何时何地触发输入验证而不是模型验证,反之亦然 我可以同时使用这两种工具吗?如何在它们之间切换 注意:我正在开发MVC5。事实证明,问题在于不可空属性上的[必需]属性没有任何效果。最后,即使没有提供值,类初始化也会为不可为空的属性指定默认值,模型绑定器会将这些属性视为有

今天我遇到了一个问题,在这个问题上,我用于模型绑定的属性之一是一个带有
[必需]
属性的整数。然而,ModelBinder很高兴跳过它,因为我错误地没有在视图中为它提供表单。当我修好它时,它工作得很好

然后我读了这篇文章,但无法真正理解何时何地触发输入验证而不是模型验证,反之亦然

我可以同时使用这两种工具吗?如何在它们之间切换


注意:我正在开发MVC5。

事实证明,问题在于不可空属性上的
[必需]
属性没有任何效果。最后,即使没有提供值,类初始化也会为不可为空的属性指定默认值,模型绑定器会将这些属性视为有效。例如,如果未向
public int x{get;set;}
提供任何值,则类初始化会将其赋值为0(默认为整数值)

这种情况的解决方案是通过在类型
public int?之后加上后缀
,使那些不可为null的属性可以为null?x{get;set;}

MVC1和早期的MVC2预览中使用了输入验证,只验证提交的值,而不关心模型中实际定义的内容。然而,这已经改变为模型验证,在模型验证中,验证系统检查绑定的模型是否存在验证错误。然而,required属性是一个非常微妙的属性,可能会让一些人感到困惑