Часть 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
Проверка на стороне сервера очень важна с точки зрения приложения, так как пользователи могут обойти проверку на стороне клиента. Однако формы веб-страниц, которые реализуют только проверку на стороне сервера, имеют три существенные проблемы.
- Пользователь должен дождаться публикации формы, проверки на сервере и отправки ответа в браузер.
- Пользователь не получает немедленную обратную связь при исправлении поля таким образом, чтобы оно прошло правила проверки.
- Мы тратим ресурсы сервера на выполнение логики проверки вместо использования браузера пользователя.
К счастью, в шаблонах шаблонов шаблонов MVC 3 ASP.NET встроенная проверка на стороне клиента, не требующая каких-либо дополнительных работ.
Ввод одной буквы в поле Название соответствует требованиям проверки, поэтому сообщение проверки немедленно удаляется.