Выполнение простой проверки (C#)
Стивен Уолтер (Stephen Walther)
Узнайте, как выполнять проверку в ASP.NET приложении MVC. В этом руководстве Стивен Уолтер знакомит вас с состоянием модели и вспомогательными средствами ПРОВЕРКИ HTML.
Цель этого руководства — объяснить, как можно выполнить проверку в ASP.NET приложении MVC. Например, вы узнаете, как запретить отправку формы, которая не содержит значения для обязательного поля. Вы узнаете, как использовать состояние модели и вспомогательные средства HTML проверки.
Основные сведения о состоянии модели
Для представления ошибок проверки используется состояние модели или, точнее, словарь состояний модели. Например, действие Create() в листинге 1 проверяет свойства класса Product перед добавлением класса Product в базу данных.
Не рекомендуется добавлять проверку или логику базы данных в контроллер. Контроллер должен содержать только логику, связанную с управлением потоком приложения. Мы берем ярлык, чтобы все было проще.
Листинг 1. Controllers\ProductController.cs
//
// POST: /Product/Create
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude="Id")] Product productToCreate)
{
// Validation logic
if (productToCreate.Name.Trim().Length == 0)
ModelState.AddModelError("Name", "Name is required.");
if (productToCreate.Description.Trim().Length == 0)
ModelState.AddModelError("Description", "Description is required.");
if (productToCreate.UnitsInStock
В листинге 1 проверяются свойства Name, Description и UnitsInStock класса Product. Если какое-либо из этих свойств не проходит проверочный тест, в словарь состояния модели (представленный свойством ModelState класса Controller) добавляется ошибка.
При наличии ошибок в состоянии модели свойство ModelState.IsValid возвращает значение false. В этом случае html-форма для создания нового продукта переигрывается. В противном случае при отсутствии ошибок проверки новый продукт добавляется в базу данных.
Использование вспомогательных средств проверки
Платформа ASP.NET MVC включает в себя два вспомогательных средства проверки: вспомогательное средство Html.ValidationMessage() и вспомогательное средство Html.ValidationSummary(). Эти два вспомогательных компонента используются в представлении для отображения сообщений об ошибках проверки.
Вспомогательные функции Html.ValidationMessage() и Html.ValidationSummary() используются в представлениях Create и Edit, которые автоматически создаются шаблоном ASP.NET MVC. Чтобы создать представление "Создать", выполните следующие действия.
- Щелкните правой кнопкой мыши действие Create() в контроллере продукта и выберите пункт меню Добавить представление (см. рис. 1).
- В диалоговом окне Добавление представления проверка флажок Создать строго типизированное представление (см. рис. 2).
- В раскрывающемся списке Просмотреть класс данных выберите класс Product.
- В раскрывающемся списке Просмотреть содержимое выберите Создать.
- Нажмите кнопку Добавить.
Перед добавлением представления обязательно выполните сборку приложения. В противном случае список классов не будет отображаться в раскрывающемся списке Просмотреть класс данных .
Рис. 01. Добавление представления (щелкните, чтобы просмотреть полноразмерное изображение)
Рис. 02. Создание строго типизированного представления (щелкните, чтобы просмотреть полноразмерное изображение)
После выполнения этих действий вы получите представление Создание в листинге 2.
Листинг 2. Views\Product\Create.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.Product>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<title>Create</title>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Create</h2>
<%= Html.ValidationSummary() %>
<% using (Html.BeginForm()) {%>
<fieldset>
<legend>Fields</legend>
<p>
<label for="Name">Name:</label>
<%= Html.TextBox("Name") %>
<%= Html.ValidationMessage("Name", "*") %>
</p>
<p>
<label for="Description">Description:</label>
<%= Html.TextBox("Description") %>
<%= Html.ValidationMessage("Description", "*") %>
</p>
<p>
<label for="Price">Price:</label>
<%= Html.TextBox("Price") %>
<%= Html.ValidationMessage("Price", "*") %>
</p>
<p>
<label for="UnitsInStock">UnitsInStock:</label>
<%= Html.TextBox("UnitsInStock") %>
<%= Html.ValidationMessage("UnitsInStock", "*") %>
</p>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
<div>
<%=Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
В листинге 2 вспомогательное средство Html.ValidationSummary() вызывается непосредственно над HTML-формой. Эта вспомогатель используется для отображения списка сообщений об ошибках проверки. Вспомогательное средство Html.ValidationSummary() отображает ошибки в маркированный список.
Вспомогатель Html.ValidationMessage() вызывается рядом с каждым из полей формы HTML. Эта вспомогатель используется для отображения сообщения об ошибке рядом с полем формы. В примере с листингом 2 вспомогающая функция Html.ValidationMessage() отображает звездочку при возникновении ошибки.
На странице на рисунке 3 показаны сообщения об ошибках, отображаемые вспомогательными средствами проверки при отправке формы с отсутствующими полями и недопустимыми значениями.
Рис. 03. Представление "Создать", отправленное с проблемами (щелкните, чтобы просмотреть полноразмерное изображение)
Обратите внимание, что внешний вид полей ввода HTML также изменяется при возникновении ошибки проверки. Вспомогатель Html.TextBox() отображает атрибут class="input-validation-error" при возникновении ошибки проверки, связанной со свойством, отображаемым вспомогательным объектом Html.TextBox().
Существует три класса каскадных таблиц стилей, которые используются для управления внешним видом ошибок проверки:
- input-validation-error — применяется к тегу <ввода> , отображаемого вспомогательным модулером Html.TextBox().
- field-validation-error — применяется к тегу <span> , отображаемого вспомогательным методом Html.ValidationMessage().
- validation-summary-errors — применяется к тегу <ul> , отображаемого вспомогательной функцией Html.ValidationSummary().
Вы можете изменить эти классы каскадных таблиц стилей и, следовательно, изменить внешний вид ошибок проверки, изменив файл Site.css, расположенный в папке Содержимое.
Примечание
Класс HtmlHelper включает статические свойства только для чтения для получения имен классов CSS, связанных с проверкой. Эти статические свойства называются ValidationInputCssClassName, ValidationFieldCssClassName и ValidationSummaryCssClassName.
Предварительная проверка и проверка после привязки
Если отправить HTML-форму для создания продукта и ввести недопустимое значение для поля цена и значение для поля UnitsInStock, вы получите сообщения проверки, отображаемые на рисунке 4. Откуда берутся эти сообщения об ошибках проверки?
Рис. 04. Ошибки предварительной привязки проверки (щелкните для просмотра полноразмерного изображения)
На самом деле существует два типа сообщений об ошибках проверки: сообщения, созданные до того, как поля HTML-формы привязаны к классу, и сообщения, созданные после привязки полей формы к классу. Иными словами, существуют ошибки предварительной привязки и ошибки проверки после привязки.
Действие Create(), предоставляемое контроллером Product в листинге 1, принимает экземпляр класса Product. Сигнатура метода Create выглядит следующим образом:
public ActionResult Create([Bind(Exclude="Id")] Product productToCreate)
Значения полей HTML-формы из формы Создания привязаны к классу productToCreate с помощью связывателя модели. Связыватель модели по умолчанию автоматически добавляет сообщение об ошибке в состояние модели, если не удается привязать поле формы к свойству формы.
Связыватель модели по умолчанию не может привязать строку apple к свойству Price класса Product. Вы не можете назначить строку десятичному свойству. Поэтому связыватель модели добавляет ошибку в состояние модели.
Связыватель модели по умолчанию также не может присвоить значение NULL свойству, которое не принимает значения NULL. В частности, связыватель модели не может присвоить свойству UnitsInStock значение NULL. Опять же, связыватель модели отступает и добавляет сообщение об ошибке в состояние модели.
Если вы хотите настроить внешний вид этих предварительных сообщений об ошибках, необходимо создать строки ресурсов для этих сообщений.
Итоги
Цель этого руководства состояла в том, чтобы описать основные механизмы проверки в ASP.NET платформы MVC. Вы узнали, как использовать состояние модели и вспомогательные средства HTML проверки. Мы также обсудили различие между предварительной привязкой и проверкой после привязки. В других руководствах мы обсудим различные стратегии перемещения кода проверки из контроллеров и в классы моделей.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по