输入验证与模型验证

时间:2014-11-07 17:00:40

标签: asp.net-mvc validation

今天我遇到了一个问题,其中我用于模型绑定的一个属性是一个具有[Required]属性的整数。然而,模型绑定器很乐意跳过它,因为我错误地没有在视图中提供它的表单。当我修复它时,它工作得很好。

然后我读了这个article,但是无法理解触发输入验证的时间或地点而不是模型验证,反之亦然。

我可以同时使用两者吗?如何在它们之间切换?

P.S。:我正在开发MVC 5.

1 个答案:

答案 0 :(得分:1)

事实证明,问题在于对非可空属性的[Required]属性没有影响。最后,即使没有提供值,类初始化也会为非可空属性分配默认值,这将使模型绑定器看作有效。例如,如果没有向public int x { get; set; }提供任何值,则类初始化将其指定为0(默认为整数值)。

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

输入验证用于MVC 1和早期的MVC2预览,仅验证那些提交的值,而不关心模型中实际定义的内容。但是,这已经变为模型验证,其中验证系统检查绑定验证错误的模型。但是,必需属性是一个微妙的属性,可能会混淆一些。

相关问题