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

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

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

Итак, чтобы посмотреть, что из себя представляет валидация, создадим проект по шаблону Basic Application.

Добавим в наше приложение новую модель Book, которую частично мы разрабатывали ранее в этой главе:

    public class Book
    {
        [ScaffoldColumn(false)]
        public virtual int Id { get; set; }

        [Required]
        [Display(Name = "Название")]
        public virtual string Name { get; set; }

        [Required]
        [Display(Name = "Автор")]
        public virtual string Author { get; set; }

        [Required]
        [Display(Name = "Год")]
        public virtual int Year { get; set; }
    }

Обратите внимание, что по сравнению с предыдущей версией данной модели, мы добавили атрибут Required. Теперь создадим контроллер, который будет управлять объектами данной модели. Сделаем контроллер (пусть контроллер называется допустим BookController) типизированным: в качестве шаблона выберем MVC controller with read/write actions and views, using Entity Framework, а в качестве класса модели укажем нашу модель Book:

В итоге у нас будет по умолчанию создан набор представлений по управлению объектами модели. Запустим приложение и обратимся к действию 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 указан стиль для соответствующих классов:

    		.field-validation-error {
    			color: #f00;
    		}
    
    		.field-validation-valid {
    			display: none;
    		}
    
    		.input-validation-error {
    			border: 1px solid #f00;
    			background-color: #f00;
    		}
    
    		.validation-summary-errors {
    			font-weight: bold;
    			color: #f00;
    		}
    
    		.validation-summary-valid {
    			display: none;
    		}
    		
  4. Валидация на стороне сервера. Эта была валидация на клиентской стороне. Однако если у вас отключен javascript а браузере, то вы не увидите буковок с ошибками, а форма благополучно отправится на сервер. Но во фреймворке предусмотрена также валидация на стороне сервера:

            [HttpPost]
            public ActionResult Create(Book book)
            {
                if (ModelState.IsValid)
                {
                    db.Books.Add(book);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                return View(book);
            }
    

    С помощью свойства ModelState.IsValid мы узнаем, проходит модель валидацию или нет, и зависимости от результата совершаем те или иные действия.

Для просто демонстрации выбрано приложение по шаблону Basic, однако если вы работаете с проектом приложения по шаблону Empty, то вам придется добавлять все эти файлы jquery, код css и прочее, чтобы создать механизм валидации.

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

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