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

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

Жанры

Шрифт:

? Html.LabelFor — производит рендеринг описательной информации для данных модели. По умолчанию выводит название поля модели;

? Html.DisplayFor — производит рендеринг значений данных модели в соответствии с их типом;

? Html.EditorFor — производит рендеринг элементов управления с данными модели для возможности редактирования.

Примечание

Кроме перечисленных стандартных методов расширения, в будущем планируется добавить методы: ValidationMessageFor, TextAreaFor, TextBoxFor, HiddenFor, DropDownListFor

для соответствующей поддержки валидации и элементов управления в различных представлениях.

************************

Для всех этих методов расширения есть дополнительные методы LabelForModel, DisplayForModel и EditorForModel, которые являются сокращенным вариантом своих аналогов. Эти методы предназначены для рендеринга всей модели данных целиком без указания параметров.

Рассмотрим вариант рендеринга модели с помощью стандартных методов расширения. Для этого сформируем следующее представление (листинг 9.4).

Листинг 9.4. Модифицированное представление

<%@ 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">

Info

</asp:Content>

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

runat="server">

<div>

<fieldset>

<legend>Информация</legend>

<dl>

<dt><%= Html.LabelFor(x => Model.Name) %></dt>

<dd><%= Html.DisplayFor(x => Model.Name) %></dd>

<dt><%= Html.LabelFor(x => Model.Cost) %></dt>

<dd><%= Html.DisplayFor(x => Model.Cost) %></dd>

<dt><%= Html.LabelFor(x => Model.Description) %></dt>

<dd><%= Html.DisplayFor(x => Model.Description) %></dd>

</dl>

</fieldset>

</div>

</asp:Content>

Результат работы данного кода представлен на рис. 9.7.

Обратите внимание, что с использованием методов Html.LabelFor и Html.EditorFor для каждого элемента модели мы получили возможность осуществлять рендеринг данных в таком виде, в котором нам бы этого хотелось. Вместо стандартной разметки с использованием <div>, которая производится при автоматическом рендеринге всей модели, мы использовали тег <dl> для представления только той ее части, которая нужна нам.

Создание шаблонов

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

предлагает разработчику создать один-единственный шаблон рендеринга типа данных, а затем использовать его во всех необходимых местах.

Для того чтобы создать шаблон представления типа данных, необходимо в папке нужного контроллера в папке представлений Views создать одну из папок: DisplayTemplates или EditorTemplates. DisplayTemplates должна содержать шаблоны для рендеринга представлений для просмотра, а EditorTemplates — для редактирования. Папки DisplayTemplates и EditorTemplates содержат частичные представления *.ascx, наименование которых соответствуют типам данных, с которыми необходимо работать.

Например, на рис. 9.8 в папке Views/Store представлена папка DisplayTemplates, которая содержит частичное представление Product.ascx. Это означает, что для рендеринга данных типа Product при работе в контроллере storeController будет использоваться шаблон Product.ascx.

Содержимое Product.ascx представлено в листинге 9.5.

Листинг 9.5. Содержимое Product.ascx

<%@ Control Language="C#"

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

%>

<div>

<fieldset>

<legend>ИНформация</legend>

<dl>

<dt>

<%= Html.LabelFor(x => Model.Name) %>

</dt>

<dd>

<%= Html.DisplayFor(x => Model.Name) %>

</dd>

<dt>

<%= Html.LabelFor(x => Model.Cost) %>

</dt>

<dd>

<%= Html.DisplayFor(x => Model.Cost) %>

</dd>

<dt>

<%= Html.LabelFor(x => Model.Description) %>

</dt>

<dd>

<%= Html.DisplayFor(x => Model.Description) %>

</dd>

</dl>

</fieldset>

</div>

Как вы можете убедиться, шаблон Product.ascx соответствует той разметке, которую мы создавали для рендеринга в листинге 9.4. Однако если теперь модифицировать код листинга 9.4 до простого варианта <%= Html.DisplayFor (x => Model) %>, то результат останется неизменным, т. к. механизм ASP.NET MVC, обнаружив имеющийся шаблон Product.ascx, использует его для рендеринга представления модели с типом Product.

Аннотация данных и валидация

ASP.NET MVC 2 имеет поддержку валидации данных на основании аннотации с помощью атрибутов из пространства имен System.ComponentModel.DataAnnotations.

Давайте улучшим наше представление, внеся изменение в модель так, как показано в листинге 9.6.

Листинг 9.6. Модель данных с аннотациями

namespace TemplatedHelpersProj ect.Models

{

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

Око Силы. Трилогия. 1937 -1938 годы

Валентинов Андрей
Око силы
Фантастика:
альтернативная история
8.08
рейтинг книги
Око Силы. Трилогия. 1937 -1938 годы

Путешественник

Юань Е
3. Повелитель тайн
Фантастика:
фэнтези
эпическая фантастика
5.00
рейтинг книги
Путешественник

Я до сих пор не князь. Книга XVI

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

Ты ждала меня, Заруна? Книга первая

Лу Энн
1. Мир Заруны
Фантастика:
героическая фантастика
8.00
рейтинг книги
Ты ждала меня, Заруна? Книга первая

Точка Бифуркации V

Смит Дейлор
5. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Точка Бифуркации V

Бояръ-Аниме. Газлайтер. Том 32

Володин Григорий Григорьевич
32. История Телепата
Фантастика:
альтернативная история
аниме
фэнтези
попаданцы
6.40
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 32

Первое поражение Сталина

Жуков Юрий Николаевич
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Первое поражение Сталина

Солнечный ветер (сборник)

Кларк Артур Чарльз
Шедевры фантастики
Фантастика:
космическая фантастика
5.00
рейтинг книги
Солнечный ветер (сборник)

Рейдер

Астахов Павел Алексеевич
Проза:
современная проза
7.75
рейтинг книги
Рейдер

Цвет сверхдержавы - красный 3 Восхождение. часть 1

Сергей Симонов
3. Цвет сверхдержавы - красный
Фантастика:
альтернативная история
5.00
рейтинг книги
Цвет сверхдержавы - красный 3 Восхождение. часть 1

Белая гвардия. История России

Булгаков Михаил Афанасьевич
Белая гвардия
Проза:
современная проза
советская классическая проза
5.00
рейтинг книги
Белая гвардия. История России

Жрец Хаоса. Книга ХVI

Борзых М.
16. Зов пустоты
Фантастика:
аниме
фэнтези
эпическая фантастика
попаданцы
5.00
рейтинг книги
Жрец Хаоса. Книга ХVI

Покушения и инсценировки: От Ленина до Ельцина

Зенькович Николай Александрович
Документальная литература:
биографии и мемуары
публицистика
5.00
рейтинг книги
Покушения и инсценировки: От Ленина до Ельцина

Дитя прибоя

Трофимов Ерофей
Дитя прибоя
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.25
рейтинг книги
Дитя прибоя