Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Итак, чтобы посмотреть, что из себя представляет валидация, создадим проект по шаблону Basic Application.
Добавим в наше приложение новую модель Book, которую частично мы разрабатывали ранее в этой главе:
public class Book { [HiddenInput(DisplayValue = false)] public int Id { get; set; } [Required] [Display(Name = "Название")] public string Name { get; set; } [Required] [Display(Name = "Автор")] public string Author { get; set; } [Required] [Display(Name = "Год")] public int Year { get; set; } }
Обратите внимание, что по сравнению с предыдущей версией данной модели, мы добавили атрибут Required. Теперь создадим контроллер, который будет управлять объектами данной модели. Сделаем контроллер (пусть контроллер называется допустим BookController) типизированным: в качестве шаблона выберем MVC 5 Controller with views, using Entity Framework, а в качестве класса модели укажем нашу модель Book, а в качестве контекста данных = BookContext:
В итоге у нас будет по умолчанию создан набор представлений по управлению объектами модели. Запустим приложение и обратимся к действию Create нашего контроллера (запрос Book/Create), которое должно добавлять новую запись в БД. Не заполняя поля, мы можем сразу нажать на кнопку отправки формы:
В данном случае мы задействовали механизм валидации, который используется в mvc по умолчанию. Каковы же основные моменты валидации в данном случае:
Использование атрибутов валидации при объявлении модели. Мы указали для каждого свойства атрибут Required
,
благодаря чему фреймворк знает, что данное свойство обязательно должно содержать некоторое значение.
Использование хелперов валидации. При каждом свойстве мы используем хелпер валидации Html.ValidationMessageFor
:
<div class="editor-label"> @Html.LabelFor(model => model.Name) </div> <div class="editor-field"> @Html.EditorFor(model => model.Name) @Html.ValidationMessageFor(model => model.Name) </div>
Благодаря чему и отображается сообщение об ошибке.
Чтобы настроить стиль отображения на стороне клиента, в файле Site.css по умолчанию указан стиль для соответствующих классов:
/* styles for validation helpers */ .field-validation-error { color: #b94a48; } .field-validation-valid { display: none; } input.input-validation-error { border: 1px solid #b94a48; } input[type="checkbox"].input-validation-error { border: 0 none; } .validation-summary-errors { color: #b94a48; } .validation-summary-valid { display: none; }
Валидация на стороне сервера. Эта была валидация на клиентской стороне. Однако если у вас отключен javascript а браузере, то вы не увидите буковок с ошибками, а форма благополучно отправится на сервер. Но во фреймворке предусмотрена также валидация на стороне сервера:
public ActionResult Create([Bind(Include="Id,Name,Author,Year")] Book book) { if (ModelState.IsValid) { db.Books.Add(book); db.SaveChanges(); return RedirectToAction("Index"); } return View(book); }
С помощью свойства ModelState.IsValid мы узнаем, проходит модель валидацию или нет, и зависимости от результата совершаем те или иные действия.
Таков в общем механизм валидации приложения по умолчанию. Теперь более подробно поговорим об основных моментах валидации. Начнем с атрибутов.