Поделиться через


Часть 6. Использование заметок к данным для проверки модели

Джон Галлоуэй

Хранилище музыки MVC — это учебное приложение, в которое пошаговые инструкции по использованию ASP.NET MVC и Visual Studio для веб-разработки.

MVC Music Store — это упрощенный пример реализации магазина, который продает музыкальные альбомы в Интернете и реализует базовые функции администрирования сайтов, входа пользователей и корзины для покупок.

В этой серии учебников подробно описаны все действия по созданию примера приложения ASP.NET MVC Music Store. В части 6 рассматривается использование заметок к данным для проверки модели.

У нас возникла серьезная проблема с нашими формами создания и редактирования: они не выполняют никакой проверки. Мы можем оставить обязательные поля пустыми или ввести буквы в поле Цена, и первая ошибка, которую мы увидим, находится в базе данных.

Мы можем легко добавить проверку в наше приложение, добавив заметки к данным в классы моделей. Заметки к данным позволяют нам описывать правила, которые мы хотим применить к свойствам модели, и ASP.NET MVC позаботится об их применении и отображении соответствующих сообщений для наших пользователей.

Добавление проверки в формы альбома

Мы будем использовать следующие атрибуты заметки к данным:

  • Обязательный — указывает, что свойство является обязательным полем.
  • DisplayName — определяет текст для использования в полях формы и сообщениях проверки.
  • StringLength — определяет максимальную длину строкового поля.
  • Диапазон — задает максимальное и минимальное значение для числового поля.
  • Bind — список полей для исключения или включения при привязке значений параметров или форм к свойствам модели.
  • ScaffoldColumn — позволяет скрывать поля из форм редактора

*Примечание. Дополнительные сведения о проверке модели с помощью атрибутов заметки к данным см. в документации MSDN по адресу *https://go.microsoft.com/fwlink/?LinkId=159063

Откройте класс Album и добавьте в начало следующие операторы using .

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

Затем обновите свойства, чтобы добавить атрибуты отображения и проверки, как показано ниже.

namespace MvcMusicStore.Models
{
    [Bind(Exclude = "AlbumId")]
    public class Album
    {
        [ScaffoldColumn(false)]
        public int      AlbumId    { get; set; }
        [DisplayName("Genre")]
        public int      GenreId    { get; set; }
        [DisplayName("Artist")]
        public int      ArtistId   { get; set; }
        [Required(ErrorMessage = "An Album Title is required")]
        [StringLength(160)]
        public string   Title      { get; set; }
        [Range(0.01, 100.00,
            ErrorMessage = "Price must be between 0.01 and 100.00")]
        public decimal Price       { get; set; }
        [DisplayName("Album Art URL")]
        [StringLength(1024)]
        public string AlbumArtUrl { get; set; }
        public virtual Genre  Genre    { get; set; }
        public virtual Artist Artist   { get; set; }
    }
}

Пока мы там, мы также изменили свойства "Жанр" и "Исполнитель" на виртуальные. Это позволяет Entity Framework отложенно загружать их по мере необходимости.

public virtual Genre    Genre       { get; set; }
public virtual Artist   Artist      { get; set; }

После добавления этих атрибутов в модель альбома на экране "Создание и редактирование" сразу же начинается проверка полей и использование выбранных отображаемых имен (например, URL-адрес обложки альбома вместо AlbumArtUrl). Запустите приложение и перейдите по папке /StoreManager/Create.

Снимок экрана: форма создания с раскрывающимся списком

Далее мы прервем некоторые правила проверки. Введите цену 0 и оставьте поле Название пустым. При нажатии кнопки Создать отобразится форма с сообщениями об ошибках проверки, показывающая, какие поля не соответствуют определенным правилам проверки.

Снимок экрана: форма создания с полями

Тестирование проверки Client-Side

Проверка на стороне сервера очень важна с точки зрения приложения, так как пользователи могут обойти проверку на стороне клиента. Однако формы веб-страниц, которые реализуют только проверку на стороне сервера, имеют три существенные проблемы.

  1. Пользователь должен дождаться публикации формы, проверки на сервере и отправки ответа в браузер.
  2. Пользователь не получает немедленную обратную связь при исправлении поля таким образом, чтобы оно прошло правила проверки.
  3. Мы тратим ресурсы сервера на выполнение логики проверки вместо использования браузера пользователя.

К счастью, в шаблонах шаблонов шаблонов MVC 3 ASP.NET встроенная проверка на стороне клиента, не требующая каких-либо дополнительных работ.

Ввод одной буквы в поле Название соответствует требованиям проверки, поэтому сообщение проверки немедленно удаляется.

Снимок экрана: форма создания, в которой поле Price отображается красным цветом из-за ошибки во входных данных и сопровождающегося красным текстом ошибки.