UR.ANUS
Asp.net mvc framework
вернуться

Магдануров Гайдар Ильдарович

Шрифт:

Листинг 5.7. Пример валидации данных

[AcceptVerbs(HttpVerbs.Post)]

public ActionResult Edit(Product obj, int id)

{

if (obj.UnitsOnOrder < 0)

ModelState.AddModelError("UnitsOnOrder",

"Количество заказанных единиц товара не может

быть отрицательным.");

if (obj.UnitsInStock < 0)

ModelState.AddModelError("UnitsInStock",

"Количество единиц товара на складе должно быть не

отрицательным.");

if (obj.UnitPrice <= 0)

ModelState.AddModelError("UnitPrice",

"Цена должна быть больше нуля.");

if (!ModelState.IsValid)

{

// есть ошибки, еще раз

// показать форму редактирования

return View(obj);

}

else

{

// ошибок нет, сохранить

db.SaveProduct(obj);

return RedirectToAction("Index");

}

}

Процесс валидации прост — выполняется проверка условий и в случае наличия ошибок в коллекцию Modelstate добавляется информация в виде пары "идентификатор элемента — описание допущенной ошибки". Если в коллекцию Modelstate добавлена хотя бы одна такая пара, то значение свойства Modelstate.isValid будет установлено в false. В случае если ошибки допущены, то необходимо снова отобразить то же представление, которое использовалось для радактирования данных, и передать ему те данные, которые были введены пользователем на предыдущем шаге. Пример такого представления, работающего с кодом, описанным в листинге 5.7, показан в листинге 5.8, там же приведено строго типизированное представление, в качестве модели использующее класс Product.

Листинг 5.8. Представление Edit.aspx

<%@ Page Title="" Language="C#"

MasterPageFile="~/Views/Shared/Site.Master"

Inherits="System.Web.Mvc.ViewPage<MvcViewsDemo.Models.Product>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent"

runat="server">

Edit

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>

Редактирование сведений о товаре

</h2>

<%= Html.ValidationSummary("npи редактировании сведений

о товаре произошли ошибки.") %>

<% using (Html.BeginForm)

{%>

<fieldset>

<legend>Редактирование сведений о товаре</legend>

<label for="ProductID">

Код продукта:

</1аЬе1>

<%= Model.ProductID.ToString %>

<%= Html.Hidden("ProductId", Model.ProductID)%>

<label for="ProductName">

Название:

</label>

<%= Html.TextBox("ProductName", Model.ProductName) %>

<%= Html.ValidationMessage("ProductName", "*") %>

<label for="UnitPrice">

Цена:

</label>

<%= Html.TextBox("UnitPrice",

String.Format("{0:F}", Model.UnitPrice)) %>

<%= Html.ValidationMessage("UnitPrice", "*") %>

<label for="UnitsInStock">

На складе:

</label>

<%= Html.TextBox("UnitsInStock", Model.UnitsInStock) %>

<%= Html.ValidationMessage("UnitsInStock", "*") %>

<label for="UnitsOnOrder">

Заказано:

</label>

<%= Html.TextBox("UnitsOnOrder", Model.UnitsOnOrder) %>

<%= Html.ValidationMessage("UnitsOnOrder", "*") %>

<input type="submit" value="Save" />

</fieldset>

<% } %>

<div>

<%=Html.ActionLink("K списку товаров", "Index") %>

</div>

</asp:Content>

В листинге 5.8 методы Html.ValidationMessage вызываются co вторым строковым параметром, указывающим сообщение, которое должно быть отображено пользователю в случае наличия ошибки в коллекции ModelState. В результате форма, заполненная с ошибками, будет выглядеть так, как показано на рис. 5.2.

Для того чтобы сообщение об ошибке было выведено непосредственно в месте вызова метода Html.ValidationMessage, метод нужно вызывать без указания второго параметра Html.ValidationMessage("UnitPrice"). Результат приведен на рис. 5.3.

Стоит отметить, что если в коде представления не используется строготипизированная привязка к свойствам модели, то привязка к данным осуществляется автоматически, и в этом случае при возникновении ошибок нет необходимости передавать объект модели представлению через метод View, как это было сделано в листинге 5.7. То есть фрагмент кода из листинга 5.7 может быть написан так, как указано далее. Листинг 5.9 демонстрирует код представления, не использующего привязку к свойствам объекта модели Model.

  • Читать дальше
  • 1
  • ...
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • ...

UR.ANUS - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • support@anus.bid