这是一个描述(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
。这是一个价值。
问题:
如果我想强制此值始终在请求中明确设置我应该使其可以为空并将[Required]
放在其上,这是有效的。但DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes
的用途是什么?
答案 0 :(得分:2)
如果我们引用ASP.NET MVC源,则仅在DataAnnotationsModelValidatorProvider.Getvalidators方法中检查DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes
,该方法为HTML Helpers提供验证元数据(在呈现data-val- *属性时)和{{3} }。
因此,当需要更改客户端验证的行为并允许传递空值(即字段已过帐但没有设置值)时,可以设置DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes
类型到控制器动作。