Как AddImplicitRequiredAttributeForValueTypes действительно работает и для чего он нужен? - PullRequest
4 голосов
/ 16 февраля 2012

Вот описание (ASP.NET MVC 3):

  1. У меня есть этот параметр DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes в значении по умолчанию true (проверено отладчиком)

  2. В моей модели есть поле типа значения (int, DateTime, decimal):

    public class MyModel
    {    
       public int SomeField { get; set; }
    }
    
  3. Когда я публикую пустую форму для этого действия (не указан SomeField):

      public ActionResult Submit(MyModel request)
      { 
          if (ModelState.IsValid)
          {
              ..
          }
      else
          {
              ..
          }
       }
    
  4. У меня нет ошибок валидации! Мне кажется логичным - значение по умолчанию для int 0. Который является значением.

Вопросы:

Если я хочу принудительно установить это значение всегда в запросе, я должен сделать его обнуляемым и поставить [Required], это работает. Но для чего DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes?

1 Ответ

2 голосов
/ 10 апреля 2012

Если мы ссылаемся на источники ASP.NET MVC, DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes проверяется только в DataAnnotationsModelValidatorProvider.Getvalidators метод, который предоставляет метаданные проверки для помощников HTML (при отображении атрибутов data-val- *) и DefaultModelBinder .

Таким образом, DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes может быть установлено, когда необходимо изменить поведение проверки на стороне клиента и разрешить передачу пустых значений (т.е. поле опубликовано, но не имеет установленного значения) для типов значений в контроллер действие.

...