这是一个描述(ASP.NET MVC 3):
>我将此参数DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes保留为默认值true(使用调试器检查)
>我的模型中有值类型字段(int,DateTime,decimal):
public class MyModel
{
public int SomeField { get; set; }
}
>当我将空表单发布到此操作时(没有指定SomeField):
public ActionResult Submit(MyModel request)
{
if (ModelState.IsValid)
{
..
}
else
{
..
}
}
>我没有任何验证错误!在我看来这是合乎逻辑的 – int的默认值是0.这是一个值.
问题:
如果我想强制这个值总是在请求中明确设置我应该使它可以为空并将[必需]放在它上面,这是有效的.但是DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes用于什么?
最佳答案 如果我们引用ASP.NET MVC源,则仅在
DataAnnotationsModelValidatorProvider.Getvalidators方法中检查DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes,该方法为HTML Helpers(在呈现data-val- *属性时)和
DefaultModelBinder提供验证元数据.
因此,当需要更改客户端验证的行为并允许将值类型传递给控制器操作时,允许传递空值(即,字段已过帐但没有设置值),可以设置DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes.