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

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

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

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

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

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

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

Добавление валидации в формы альбома

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

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

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

Откройте класс "Альбом" и добавьте следующие инструкции 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 и оставьте поле "Заголовок пустым". Щелкнув кнопку "Создать", мы увидим форму, отображаемую с сообщениями об ошибках проверки, показывающими, какие поля не соответствуют определенным правилам проверки.

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

Тестирование клиентской валидации на стороне клиента

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

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

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

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

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