Чтение онлайн

на главную - закладки

Жанры

Шрифт:

using System;

using System.ComponentModel;

using System.ComponentModel.DataAnnotations;

using System.Web.Mvc;

public class Product

{

[DisplayName("Идентификатор")]

[HiddenInput]

public int Id { get; set; }

[DisplayName("Наименование товара")]

[Required(ErrorMessage = "Не указано наименование")]

public string Name { get; set; }

[DisplayName("Описание")] public string Description { get; set; }

[DisplayName("Цена")]

[Required(ErrorMessage="He

указана цена")]

public decimal Cost { get; set; }

[DisplayName("Дата обновления")]

[HiddenInput(DisplayValue=false)]

public DateTime UpdatedAt { get; set; }

}

}

Обратите внимание на используемые атрибуты из пространства имен System.ComponentModel.DataAnnotations. С помощью этих атрибутов модель данных помечается метаданными, которые в дальнейшем автоматически используются в разных частях программы. Для демонстрации этого использования рассмотрим новое представление Edit для контроллера StoreController, предназначенное для редактирования данных (листинг 9.7).

Листинг 9.7. Представление для редактирования данных модели типа Product

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"

Inherits="System.Web.Mvc.ViewPage<TemplatedHelpersProj ect.Models.Product> "

%>

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

runat="server">

Редактирование информации

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent"

runat="server">

<h2>Товар</h2>

<%= Html.ValidationSummary %>

<% using(Html.BeginForm) {%>

<%= Html.EditorFor(x => Model) %>

<input type="submit" value="Обновить" />

<%} %>

</asp:Content>

Обратите внимание, в представлении используется шаблонный помощник Html.EditorFor, назначение которого — формировать разметку для редактирования, соответствующую модели.

В контроллере storeController добавим действия Edit (листинг 9.8).

Листинг 9.8. Действия Edit

public ActionResult Edit

{

var product = new Product {

ost = 1,

Description = "Описание",

Id = 1,

Name = "Товар",

UpdatedAt = DateTime.Now };

return View(product);

}

[HttpPost]

public ActionResult Edit(Product product)

{

return View(product);

}

Теперь, запустив приложение на выполнение, перейдя на Store/Edit и пробуя обновить данные без указания некоторых полей, мы получим такую картину (рис. 9.9).

Обратите внимание на то, что подписи к полям и сообщения об ошибках

валидации соответствуют тем данным, которые были заведены нами через атрибуты аннотации данных. Кроме того, с помощью атрибута Hiddeninput нам удалось скрыть данные о времени обновления и изменить представление поля идентификатора с редактируемого поля на обычное текстовое поле.

Этот пример показывает, как использование атрибутов DisplayName, Hiddeninput, Required и др. из пространства имен System.Component-Model.DataAnnotations позволяет создать для модели набор метаданных, которые позже используются ASP.NET MVC для формирования разметки, подписей к полям ввода и валидации и вывода информации об ошибках.

Кроме поддержки валидации на сервере, ASP.NET MVC 2 предлагает поддержку валидации и на клиенте с помощью библиотеки валидации, написанной для jQuery. Для автоматической валидации данных на стороне клиента по умолчанию поддерживаются следующие атрибуты аннотирования данных:

StringLengthAttribute, RequiredAttribute, RegexAttribute, RangeAttribute.

Для включения клиентской валидации необходимо добавить на страницу следующий код, подключить скрипты:

<script type="text/javascript" src="MicrosoftAj ax.js"></script>

<script type="text/javascript" src="MicrosoftMvcAj ax.js"></script>

и для формы указать на необходимость использования клиентской валидации

<% using(Html.BeginForm) { %>

//...

<% Html.EnableClientValidation; %>

<% } %>

Кроме того, финальный вариант ASP.NET MVC 2 будет поддерживать новый механизм адаптеров, который позволит вам написать свой собственный провайдер клиентской валидации.

Классы метаданных

Существуют сценарии, когда аннотирование классов не представляется возможным, например, когда класс является автогенерируемым классом контекста данных Linq To Sql. Кроме того, вероятны сценарии, когда получение данных аннотации необходимо производить не с помощью атрибутов System.ComponentModel.DataAnnotations, а из других источников: базы данных или файлов XML.

Для поддержки таких сценариев в ASP.NET MVC введен механизм классов метаданных. Класс метаданных представляет собой обычный класс, служащий только для одной цели — предоставлять дополнительные данные — метаданные — о другом классе. Для примера добавим к нашему классу Product класс с метаданными, вынеся все данные аннотации в метакласс (листинг 9.9).

Листинг 9.9. Класс с метаданными для класса Product

namespace TemplatedHelpersProject.Models {

using System;

using System.ComponentModel;

using System.ComponentModel.DataAnnotations;

using System.Web.Mvc;

[MetadataType (typeof (ProductMetadata)) ]

public class Product

{

public int Id { get; set; }

public string Name { get; set; }

public string Description { get; set; }

Поделиться:
Популярные книги

Гримуар темного лорда IX

Грехов Тимофей
9. Гримуар темного лорда
Фантастика:
попаданцы
альтернативная история
аниме
фэнтези
5.25
рейтинг книги
Гримуар темного лорда IX

Фея любви. Трилогия

Николаева Мария Сергеевна
141. В одном томе
Фантастика:
фэнтези
8.55
рейтинг книги
Фея любви. Трилогия

Том 2. Рассказы и пьесы 1904-1907

Андреев Леонид Николаевич
2. Собрание сочинений в шести томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 2. Рассказы и пьесы 1904-1907

Искушение чародея (сборник)

Булычев Кир
Фантастика:
научная фантастика
космическая фантастика
6.20
рейтинг книги
Искушение чародея (сборник)

Великое кольцо (сборник)

Ефремов Иван Антонович
Гиганты фантастики
Фантастика:
научная фантастика
7.86
рейтинг книги
Великое кольцо (сборник)

Далекие горизонты (сборник)

Ле Гуин Урсула Кребер
Фантастика:
фэнтези
научная фантастика
космическая фантастика
5.00
рейтинг книги
Далекие горизонты (сборник)

Отрок (XXI-XII)

Красницкий Евгений Сергеевич
Фантастика:
альтернативная история
8.50
рейтинг книги
Отрок (XXI-XII)

Играть... в тебя

Зайцева Мария
3. Звериные повадки Симоновых
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Играть... в тебя

Дорога ветров

Уильямс Тэд
3. Орден Манускрипта
Фантастика:
фэнтези
7.75
рейтинг книги
Дорога ветров

Искатель приключений

де Монтепен Ксавье
Приключения:
исторические приключения
6.25
рейтинг книги
Искатель приключений

Я снова князь. Книга XXIII

Дрейк Сириус
23. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я снова князь. Книга XXIII

От Византии до Орды. История Руси и русского Слова

Кожинов Вадим Валерьянович
1. История допетровской Руси
Научно-образовательная:
история
8.33
рейтинг книги
От Византии до Орды. История Руси и русского Слова

Теория культуры

Коллектив авторов
Научно-образовательная:
культурология
5.00
рейтинг книги
Теория культуры

Дневник. Том III. 1860-1861. Созерцательное богословие. Крупицы от трапезы Господней

Кронштадтский Иоанн
Религия и эзотерика:
религия
православие
христианство
5.00
рейтинг книги
Дневник. Том III. 1860-1861. Созерцательное богословие. Крупицы от трапезы Господней