Является ли DataTypeAttribute атрибутом проверки для класса DefaultModelBinder
Я только что заметил, что DataTypeAttribute
класс наследуется от System.ComponentModel.DataAnnotations.ValidationAttribute
,
С точки зрения ASP.NET MVC DefaultModelBinder
класс, это DataTypeAttribute
такое атрибут проверки? Проще говоря, проверяет ли ModelBinder объект в соответствии с DataTypeAttribute
?
Например, если я укажу DataType
собственность на DataType.EmailAddress
, будет ли он проверять адрес электронной почты или этот атрибут предоставляет только метаданные для объектов.
ОБНОВИТЬ
Я нашел похожий вопрос на SO:
Работает ли валидация DataTypeAttribute в MVC2?
Таким образом, в соответствии с этим он не работает в качестве атрибута проверки. Итак, почему он унаследован от System.ComponentModel.DataAnnotations.ValidationAttribute
если он не служит атрибутом проверки?
2 ответа
DataTypeAttribute не содержит никакой логики валидации.
Причина, по которой он вытекает из ValidationAttribute, заключается в том, что вы можете создать новый класс пользовательских типов данных, который был одновременно DataType и Validation, все они объединены в один. Это нежелательный побочный эффект.NET, не допускающий множественное наследование.
Так что да, это валидатор... который по умолчанию не выполняет валидацию. Он терпеливо ждет, когда вы сделаете тяжелую работу.:)
На самом деле, если вы загляните внутрь MVC 3 Futures, вы увидите, что мы использовали это для создания новых пользовательских валидаторов, где мы знали, что jQuery уже способен предоставлять логику проверки на стороне клиента, и мы добавили зеркальную логику проверки на стороне сервера (и сохранил преимущества DataType для шаблонов).
На основе исходного кода MVC3 единственная цель DataTypeAttribute
это заполнить ModelMetadata.DataTypeName
свойство. И это свойство используется только при генерации шаблона EditorFor/DisplayFor. Таким образом, вы были правы, это не имеет ничего общего с проверкой. Так что я не знаю, почему он унаследован от ValidationAttribute
, Возможно, авторы фреймворка зарезервировали его для будущего использования.