AddImplicitRequiredAttributeForValueTypes如何真正起作用,它的用途是什么?

时间:2012-02-16 10:59:20

标签: asp.net-mvc asp.net-mvc-3 validation data-annotations

这是一个描述(ASP.NET MVC 3):

  1. 我在默认值DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes中使用此参数true(使用调试器检查)

  2. 我的模型中有值类型字段(intDateTimedecimal):

    public class MyModel
    {    
       public int SomeField { get; set; }
    }
    
  3. 当我将表单发布到此操作时(未指定SomeField):

      public ActionResult Submit(MyModel request)
      { 
          if (ModelState.IsValid)
          {
              ..
          }
      else
          {
              ..
          }
       }
    
  4. 我没有任何验证错误!在我看来这是合乎逻辑的 - int的默认值是0。这是一个价值。

  5. 问题:

    如果我想强制此值始终在请求中明确设置我应该使其可以为空并将[Required]放在其上,这是有效的。但DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes的用途是什么?

1 个答案:

答案 0 :(得分:2)

如果我们引用ASP.NET MVC源,则仅在DataAnnotationsModelValidatorProvider.Getvalidators方法中检查DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes,该方法为HTML Helpers提供验证元数据(在呈现data-val- *属性时)和{{3} }。

因此,当需要更改客户端验证的行为并允许传递空值(即字段已过帐但没有设置值)时,可以设置DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes类型到控制器动作。