Добавление проверки достоверности 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Добавление проверки достоверности



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

В приложении MVC проверка достоверности обычно применяется в модели предметной области, а не в пользовательском интерфейсе. Это означает возможность определения в одном месте нужных критериев проверки достоверности, которые вступают в действие везде, где используется класс модели.

Инфраструктура ASP.NET MVC поддерживает декларативные правила проверки достоверности, определенные с помощью атрибутов из пространства имен System.ComponentModel.DataAnnotations, а это значит, что ограничения проверки достоверности выражаются с помощью стандартных атрибутов C#. В примере ниже показано, как применить эти атрибуты к классу модели GuestResponse:

C#

using System.ComponentModel.DataAnnotations;

 

namespace PartyInvites.Models

{

public class GuestResponse

{

   [Required(ErrorMessage="Пожалуйста, введите свое имя")]

   public string Name { get; set; }

 

   [Required(ErrorMessage="Пожалуйста, введите email")]

   [RegularExpression(".+\\@.+\\..+", ErrorMessage="Вы ввели некорректный email")]

   public string Email { get; set; }

 

   [Required(ErrorMessage = "Пожалуйста, введите телефон")]

   public string Phone { get; set; }

 

   [Required(ErrorMessage = "Пожалуйста, укажите, примите ли участие в вечеринке")]

   public bool? WillAttend { get; set; }

}

}

 

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

Как уже отмечалось ранее, для свойства WillAttend был выбран булевский тип, допускающий значение null. Это было сделано для того, чтобы можно было применить атрибут проверки Required. В случае использования обычного булевского типа значением, получаемым посредством привязки модели, могло бы быть только true или false, и не было бы возможности определить, выбрал ли пользователь значение. Булевский тип, допускающий null, имеет три разрешенных значения: true, false и null. Значение null будет применяться, если пользователь не выбрал значение, и это вынудит атрибут Required сообщить об ошибке проверки достоверности. Это хороший пример того, насколько элегантно инфраструктура MVC Framework сочетает средства C# с HTML и HTTP.

Проверку на наличие проблемы с достоверностью данных можно выполнить с использованием свойства ModelState.IsValid в классе контроллера. В примере ниже показано, как это реализовано в методе действия RsvpForm, поддерживающем запросы POST, внутри класса контроллера Home:

C#

//...

 

[HttpPost]

public ViewResult RsvpForm(GuestResponse guest)

{

if (ModelState.IsValid)

                          // Нужно отправить данные нового гостя по электронной почте

                          // организатору вечеринки.

                          return View("Thanks", guest);

else

                          // Обнаружена ошибка проверки достоверности

                          return View();

}

 

Если ошибки проверки достоверности отсутствуют, мы указываем MVC, что нужно визуализировать представление Thanks, как это делалось ранее. В случае обнаружения ошибок проверки достоверности мы повторно визуализируем представление RsvpForm вызывая метод View() без параметров.

Простое отображение формы в ситуации, когда имеется ошибка, не особенно полезно - мы должны также предоставить пользователю информацию, в чем заключается проблема, и почему принять отправку формы невозможно. Это делается с применением вспомогательного метода Html.ValidationSummary() в представлении RsvpForm, как показано в примере ниже:

HTML

@model PartyInvites.Models.GuestResponse

 

@{

Layout = null;

}

 

<!DOCTYPE html>

 

<html>

<head>

<meta name="viewport" content="/>

<title>RsvpForm</title>

</head>

<body>

@using (Html.BeginForm())

{

   @Html.ValidationSummary()

   <p>Ваше имя: @Html.TextBoxFor(x => x.Name)</p>

   <p>Ваш email: @Html.TextBoxFor(x => x.Email)</p>

   <p>Ваш телефон: @Html.TextBoxFor(x => x.Phone)</p>

   <p>Вы придете?

       @Html.DropDownListFor(x => x.WillAttend, new[] {

           new SelectListItem() { Text = "Да, конечно я буду", Value = Boolean.TrueString},

           new SelectListItem() { Text = "Нет, я не смогу", Value = Boolean.FalseString}

       })

   </p>

   <input type="submit" value="Отправить форму RSVP" />

}

</body>

</html>

 

В отсутствие ошибок метод Html.ValidationSummary() создает скрытый элемент списка в виде заполнителя внутри формы. Инфраструктура MVC делает заполнитель видимым и добавляет сообщения об ошибках, определенные атрибутами проверки достоверности. Результирующее окно показано на рисунке:

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

Если вам приходилось иметь дело с ASP.NET Web Forms, то вы знаете, что в Web Forms имеется концепция серверных элементов управления, которые сохраняют состояние, сериализуя значения в скрытое поле формы по имени _VIEWSTATE. Привязка модели ASP.NET MVC не имеет никакого отношения к концепциям серверных элементов управления, обратным отправкам или средству View State, характерным для Web Forms. Инфраструктура ASP.NET MVC не внедряет скрытое поле _VIEWSTATE в визуализированные HTML-страницы.



Поделиться:


Последнее изменение этой страницы: 2020-11-28; просмотров: 125; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.252.140 (0.007 с.)