Тип данных DataAnnotation - PullRequest
       2

Тип данных DataAnnotation

4 голосов
/ 29 февраля 2012

Я читаю об этом в MSDN, и это не очень много описывает.В нем говорится, что он используется для указания типа данных, связываемого со столбцом данных или параметром.Имеет смысл.Значит ли это, что я должен использовать его на всех своих объектах?Я предполагаю, что нет.Так почему же существует DataType.Text, кажется довольно бесполезным, когда у вас есть свойство в виде строки.

Я нашел использование для этого, чтобы использовать многострочный текст в качестве типа данных для создания текстовой области на стороне клиента, а не просто как однострочный элемент ввода текста.Но как это относится к столбцу данных или параметру?

Я также предполагал, что это также подтвердит его, поскольку я использовал DataType.Url, но он проверяет, введен или нет URL-адрес.То же самое с DataType.Email.Есть ли что-то, что я делаю не так или мне нужно вместо этого использовать RegEx?

Ответы [ 4 ]

8 голосов
/ 01 марта 2012

См. Мою статью MSDN Перечисление типа данных Это НЕ атрибуты проверки.Из статьи MSDN:

Атрибут DataTypeAttribute позволяет помечать поля с помощью типа, который является более конкретным, чем внутренние типы базы данных.Например, поле строковых данных, содержащее адреса электронной почты, можно отнести к типу EmailAddress.К этой информации могут получить доступ шаблоны полей и изменить способ обработки поля данных.(то есть создать ссылку)

5 голосов
/ 01 марта 2012

Атрибут DataType в контексте ASP.NET MVC более или менее подсказывает, какой шаблон представления использовать для визуализации отображения и редактора для этого свойства.Как вы заметили, он предоставляет перечень поддерживаемых типов данных, для которых ASP.NET MVC внутренне предоставляет шаблоны редактора и отображения (MultilineText -> textarea html input), но он также может принимать строковый параметр с именем произвольного типа.Все, что он делает, это ищет представление с этим именем (предварительно определенное или нет) в Views/ControllerName/EditorTemplates/{DataTypeName}.cshtml или Views/ControllerName/DisplayTemplates/{DataTypeName}.cshtml, когда вы соответственно используете Editor / EditorFor или Display / DisplayFor (он также выполняет поиск в Views / Shared /...).Если он не подходит, он использует встроенный, если он доступен.

Эффект применения атрибута DataType почти такой же, как при применении атрибута UIHint, но он немногоболее явно.Например, я бы использовал DataType.Currency для цены и UIHint для, скажем, пользовательского свойства модели пользовательского интерфейса ползунка.

Относительно проверки - встроенные шаблоны предоставляют ее, но если вы будете использоватьпользовательский тип данных в вашем шаблоне отображения / редактирования, который вы должны будете указать сами.

1 голос
/ 02 декабря 2016

DataTypeAttribute не проверяет ничего, несмотря на наследование от ValidationAttribute.Он переопределяет метод IsValid(), но просто всегда возвращает true.

Если вы хотите проверить поле Email или Url, используйте взамен EmailAttribute или UrlAttribute.Они наследуются от DataTypeAttribute и соответственно переопределяют метод IsValid().

Это полный список определенных атрибутов DataType:

  • CreditCardAttribute
  • EmailAddressAttribute
  • EnumDataTypeAttribute
  • FileExtensionsAttribute
  • PhoneAttribute
  • UrlAttribute
0 голосов
/ 29 февраля 2012

Не совсем уверен, что вы спрашиваете, но DataAnnotations поможет вам пометить свойства на основе бизнес-потребностей (например, электронная почта, номер телефона и т. Д.)

См. Членов DataTypeПеречисление

Для чего это нужно?

Когда вы аннотируете свои классы и используете их в качестве моделей в приложении MVC.asp.net-mvc позаботится о проверке (даже на клиенте с javascript, если у вас есть все на месте)

См. это руководство для примера: http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-6

...