Является ли DataTypeAttribute атрибутом проверки для класса DefaultModelBinder - PullRequest
1 голос
/ 13 ноября 2011

Я только что заметил, что класс DataTypeAttribute унаследован от System.ComponentModel.DataAnnotations.ValidationAttribute.

С точки зрения класса ASP.NET MVC DefaultModelBinder, DataTypeAttribute является атрибутом проверки?Проще говоря, проверяет ли ModelBinder объект в соответствии с DataTypeAttribute?

Например, если я укажу свойство DataType для DataType.EmailAddress, будет ли он проверять адрес электронной почты или этот атрибут только предоставляетметаданные для объектов.

ОБНОВЛЕНИЕ

Я нашел похожий вопрос по SO:

Работает ли валидация DataTypeAttribute в MVC2?

Итак, в соответствии с этим он не работает как атрибут проверки.Итак, почему он унаследован от System.ComponentModel.DataAnnotations.ValidationAttribute, если он не служит атрибутом проверки?

Ответы [ 2 ]

4 голосов
/ 23 ноября 2011

DataTypeAttribute не содержит саму логику проверки.

Причина, по которой он вытекает из ValidationAttribute, заключается в том, что вы можете создать новый класс пользовательских типов данных, который будет одновременно DataType и Validation, все они заключены водин.Это нежелательный побочный эффект того, что в .NET не допускается множественное наследование.

Так что да, это валидатор ... который по умолчанию не выполняет валидацию.Он терпеливо ждет, когда вы сделаете тяжелую работу.:)

На самом деле, если вы загляните внутрь MVC 3 Futures, вы увидите, что мы использовали это для создания новых пользовательских валидаторов, где мы знали, что jQuery уже способен обеспечить логику проверки на стороне клиента, и мыдобавлена ​​зеркальная логика проверки на стороне сервера (и сохранены преимущества DataType для шаблонов).

1 голос
/ 13 ноября 2011

Исходя из исходного кода MVC3, единственная цель DataTypeAttribute - заполнить свойство ModelMetadata.DataTypeName . И это свойство используется только при генерации шаблона EditorFor / DisplayFor.Таким образом, вы были правы, это не имеет ничего общего с проверкой.Так что я не знаю, почему он унаследован от ValidationAttribute.Возможно, авторы фреймворка зарезервировали его для будущего использования.

...