Аннотации данных

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 08.12.2019

Кроме атрибутов валидации модели также могут иметь доплнительные атрибуты, которые называются аннотации данных и которые располагаются в пространстве имен System.ComponentModel.DataAnnotations. Эти атрибуты определяют различные правила для отображения свойств модели.

Атрибут Display

Атрибут Display задает параметры отображения для свойства. Например, пусть у ас еть следующая модель Person:

public class Person
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string HomePage { get; set; }
    public string Password { get; set; }
    public int Age { get; set; }
}

Допустим, в представлении есть форма с использованием tag-хелперов для создания объекта данной модели Person:

@model ValidationApp.Models.Person

<form asp-action="Create" asp-controller="Home" asp-anti-forgery="true">
    <div>
        <div>
            <label asp-for="Name"></label><br />
            <input type="text" asp-for="Name" />
        </div>
        <div>
            <label asp-for="Email"></label><br />
            <input asp-for="Email" />
        </div>
        <div>
            <label asp-for="HomePage"></label><br />
            <input asp-for="HomePage" />
        </div>
        <div>
            <label asp-for="Password"></label><br />
            <input asp-for="Password" />
        </div>
        <div>
            <label asp-for="Age"></label><br />
            <input asp-for="Age" />
        </div>
        <div>
            <input type="submit" value="Save" />
        </div>
    </div>
</form>

Если мы запустим приложение, то мы можем столкнуться с проблемой:

Аннотации данные в ASP.NET Core

Хотя значения свойств все выводятся правильно, но заголовки у свойств точно такие же, как и названия свойств, что не очень удобно. Ведь мы могли назвать свойства как угодно. К тому же мы не хотим, чтобы названия на русскоязычном сайте были на английском языке.

И в этом случае мы можем задать с помощью атрибута Display отображаемую метку для свойства:

using System.ComponentModel.DataAnnotations;

namespace ValidationApp.Models
{
    public class Person
    {
        [Display(Name="Имя и фамилия")]
        public string Name { get; set; }
        [Display(Name = "Электронная почта")]
        public string Email { get; set; }
        [Display(Name = "Домашняя страница")]
        public string HomePage { get; set; }
        [Display(Name = "Пароль")]
        public string Password { get; set; }
        [Display(Name = "Возраст")]
        public int Age { get; set; }
    }
}

Теперь если мы запустим приложение, то вместо названий свойств мы увидим нужные названия:

Атрибут Display в ASP.NET Core

Для каждого поля ввода указывается метка типа <label asp-for="Name"></label>. Текст эта метка будет брать из атрибута Display (если он указан) для этого свойства. И если у нас в приложении много различных мест, где используется поле для свойства Name модели Person, то, если возникнет необходимость изменить отображаемую метку, не надо будет менять во всех местах элемент label для поля ввода. Достаточно будет изменить атрибут Display у свойства Name. И изменения произойдут глобально.

Атрибут ScaffoldColumn

Атрибут ScaffoldColumn позволяет скрыть отображение свойства при использовании хелперов Html.DisplayForModel() и Html.EditorForModel():

[ScaffoldColumn(false)]
public string Password { get; set; }

Атрибут DataType

Атрибут DataType позволяет предоставлять среде выполнения информацию об использовании свойства. Так, в классе Person имеется свойство Password, и с помощью атрибута мы указываем системе, что это свойство предназначено для хранения пароля:

[DataType(DataType.Password)]
public string Password { get; set; }

Для подобного свойства с атрибутом DataType.Password хелперы создают элемент ввода, у которого атрибут type имеет значение "password". Тогда в браузере вы при вводе данных вы не увидите вводимые символы, а вместо них будут выводиться точки.

Атрибут DataType в ASP.NET Core

Перечисление DataType может принимать несколько различных значений:

  • CreditCard: отображает номер кредитной карты

  • Currency: отображает текст в виде валюты

  • Date: отображает только дату, без времени

  • DateTime: отображает дату и время

  • Time: отображает только время

  • Duration: отображает число - некоторую продолжительность

  • EmailAddress: отображает электронный адрес

  • Password: отображает символы с использованием маски

  • PhoneNumber: отображает номер телефона

  • PostalCode: отображает почтовый индекс

  • ImageUrl: представляет путь к изображению

  • Url: отображает строку Url

  • MultilineText: отображает многострочный текст (элемент textarea)

  • Text: отображает однострочный текст

Атрибут UIHint

Данный атрибут указывает, какой будет использоваться шаблон отображения при создании разметки html для данного свойства. Шаблон управляет, как свойство будет рендерится на странице.

Имеются следующие встроенные шаблоны:

  • Boolean

    Хелперы редактирования создают флажок (checkbox) для булевых значений. Для значений типа bool? (nullable) создается элемент select с параметрами True, False и Not Set

    Хелперы отображения генерируют те же элементы html, что и хелперы редактирования, только с атрибутом disabled

  • Collection

    Используется соответствующий шаблон для рендеринга каждого элемента коллекции. Причем элементы могут быть разных типов.

  • Decimal

    Хелперы редактирования создают однострочное текстовое поле - элемент input

  • EmailAddress

    Хелперы редактирования создают однострочное текстовое поле.

    Хелперы отображения генерируют элемент ссылка, где атрибут href имеет значение mailto:url

  • HiddenInput

    Создается скрытое поле - элемент hidden input

  • Html

    Хелперы редактирования создают однострочное текстовое поле.

    Хелперы отображения просто показывают текст

  • MultilineText

    Хелперы редактирования создают многострочное текстовое поле (элемент textarea)

  • Object

    Хелперы изучают свойства объекта и выбирают наиболее подходящие для него шаблоны.

  • Password

    Хелперы редактирования создают текстовое поле для ввода символов с использованием маски

    Хелперы отображения показывают пароль как есть, без использования маски

  • String

    Хелперы редактирования создают однострочное текстовое поле

  • Url

    Хелперы редактирования создают текстовое поле

    Хелперы отображения создают элемент ссылки для данного Url

Например, используем последний шаблон Url:

using System.ComponentModel.DataAnnotations;

namespace ValidationApp.Models
{
    public class Person
    {
        [Display(Name="Имя и фамилия")]
        public string Name { get; set; }
        [Display(Name = "Электронная почта")]
        public string Email { get; set; }

        [Display(Name = "Домашняя страница")]
        [UIHint("Url")]
        public string HomePage { get; set; }

        [Display(Name = "Пароль")]
        public string Password { get; set; }
        [Display(Name = "Возраст")]
        public int Age { get; set; }
    }
}

В методе Index сформируем объект Person и передадим его в представление:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        Person p = new Person
        {
            Name = "Элронд Смит",
            Age = 58,
            HomePage = "www.microsoft.com",
            Email = "elrond.smith@gmail.com",
            Password = "qwerty"
        };
        return View(p);
    }
	// остальные методы
}

И затем выведем все значения объекта в представлении с помощью хелпера Html.DisplayForModel():

@* пространство имен модели Person *@
@model ValidationApp.Models.Person

@Html.DisplayForModel()

Тогда мы получим следующий результат:

Атрибут UIHint в ASP.NET Core

DisplayFormat

Атрибут DisplayFormat позволяет задать формат отображения свойства. Например, пусть у нас будет в модели свойство по типу DateTime:

[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)]
public DateTime DateOfBirth { get; set; }

Атрибут DisplayFormat настраивает формат с помощью ряда свойств. Так, свойство DataFormatString указывает на сам формат. Например, в данном случае мы прописали в формате вывод дня, месяца и года даты рождения.

Свойство ApplyFormatInEditMode позволяет применять форматирование к свойству даже в режиме редактирования.

Например, для объекта

Person p = new Person
{
	Name = "Элронд Смит",
	Age = 58,
	HomePage = "www.microsoft.com",
	Email = "elrond.smith@gmail.com",
	Password = "qwerty",
	DateOfBirth = new DateTime(1980, 3, 2)
};

Получим следующий вывод

Атрибут DisplayFormat в ASP.NET Core
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850