今天我遇到了一个问题,其中我用于模型绑定的一个属性是一个具有[Required]
属性的整数。然而,模型绑定器很乐意跳过它,因为我错误地没有在视图中提供它的表单。当我修复它时,它工作得很好。
然后我读了这个article,但是无法理解触发输入验证的时间或地点而不是模型验证,反之亦然。
我可以同时使用两者吗?如何在它们之间切换?
P.S。:我正在开发MVC 5.
答案 0 :(得分:1)
事实证明,问题在于对非可空属性的[Required]
属性没有影响。最后,即使没有提供值,类初始化也会为非可空属性分配默认值,这将使模型绑定器看作有效。例如,如果没有向public int x { get; set; }
提供任何值,则类初始化将其指定为0(默认为整数值)。
这种情况的解决方案是通过在?
类型之后添加public int? x { get; set; }
后缀,使那些不可为空的属性成为可空。
输入验证用于MVC 1和早期的MVC2预览,仅验证那些提交的值,而不关心模型中实际定义的内容。但是,这已经变为模型验证,其中验证系统检查绑定验证错误的模型。但是,必需属性是一个微妙的属性,可能会混淆一些。