Основы валидации

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

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

Итак, чтобы посмотреть, что из себя представляет валидация, создадим проект по шаблону 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 по умолчанию. Каковы же основные моменты валидации в данном случае:

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

  2. Использование хелперов валидации. При каждом свойстве мы используем хелпер валидации 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>
    		

    Благодаря чему и отображается сообщение об ошибке.

  3. Чтобы настроить стиль отображения на стороне клиента, в файле 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;
    }
    		
  4. Валидация на стороне сервера. Эта была валидация на клиентской стороне. Однако если у вас отключен 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 мы узнаем, проходит модель валидацию или нет, и зависимости от результата совершаем те или иные действия.

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

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850