【问题标题】:How AddImplicitRequiredAttributeForValueTypes really works and what it is for?AddImplicitRequiredAttributeForValueTypes 如何真正起作用以及它的用途是什么?
【发布时间】:2012-02-16 10:59:20
【问题描述】:

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

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

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

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

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

问题:

如果我想强制这个值总是在请求中明确设置,我应该让它可以为空并在上面加上[Required],这样就可以了。但是DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes 是干什么用的?

【问题讨论】:

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


    【解决方案1】:

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

    所以,DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes 可以在需要更改客户端验证的行为并允许传递值类型的空值(即字段已发布但未设置值)时设置为控制器动作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-31
      • 2013-05-29
      • 2010-10-30
      • 2020-09-27
      • 2012-09-17
      • 2020-08-07
      相关资源
      最近更新 更多