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

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

Жанры

Шрифт:

}

}

Листинг 5.14 демонстрирует концепцию использования серверных элементов управления: создать экземпляр класса элемента управления, задать его свойства, вызвать при необходимости методы, а затем сгенерировать разметку, которая будет возвращена вспомогательным методом.

В каких случаях подобный подход к использованию серверных элементов управления может быть оправдан? В случаях, когда у вас есть существующий элемент управления, отвечающий вашим требованиям, и для которого подобная обертка может быть удобной в использовании. Универсального

рецепта для принятия решения, стоит ли использовать элемент управления подобным образом, — нет, однако имеет смысл задуматься в случае, когда для элемента управления приходится эмулировать серверные события. Зачастую в подобных ситуациях проще реализовать поддержку необходимой функциональности в самих вспомогательных методах.

Частичные представления

Ранее в этой главе уже говорилось об использовании частичных представлений. Механизм частичных представлений позволяет многократно использовать разметку в разных методах контроллеров, аналогично примеру из листингов 5.1—5.3. Кроме того, частичные представления могут быть использованы для отображения списков элементов. Так, в листинге 5.15 приведено частичное представление, которое используется для отображения строк таблицы товаров в представлении Index.aspx, код которого приведен в листинге 5.16.

Листинг 5.15. Частичное представление ProductListItem.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<

MvcViewsDemo.Models.Product>" %>

<tr>

<td>

<%= Html.ActionLink("Изменить", "Edit", new { id=Model.ProductID }) %>

</td>

<td>

<%= Html.Encode(Model.ProductID)%>

</td>

<td>

<%= Html.Encode(Model.ProductName)%>

</td>

<td>

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

</td>

<td>

<%= Html.Encode(Model.UnitsInStock)%>

</td>

<td>

<%= Html.Encode(Model.UnitsOnOrder)%>

</td>

</tr>

Листинг 5.16. Представление Index.aspx

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

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

Inherits="System.Web.Mvc.ViewPage<IEnumerable<

MvcViewsDemo.Models. Product»" %>

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

runat="server">

Список товаров

</asp:Content>

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

runat="server">

<h2>

Список товаров

</h2>

<table>

<tr>

<th>

</th>

<th>

Код товара </th>

<th>

Название

</th>

<th>

Цена

</th>

<th>

На складе

</th>

<th>

Заказано

</th>

</tr>

<% foreach (var item in Model)

{ %>

<% Html.RenderPartial("ProductListItem", item); %>

<% } %>

</table>

</asp:Content>

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

Создание гаджетов

Частичные представления также могут быть использованы для создания гаджетов — элементов страницы, содержащих данные, не связанные с основным представлением. Гаджеты находят широкое применение на страницaх всевозможных порталов — когда есть основная страница, с которой работает пользователь, и куда выводятся дополнительные независимые информационные блоки, например, баннеры или текстовые ссылки рекламных сетей.

Разумеется, можно реализовать похожую функциональность так, как это показано в листингах 5.1—5.3, разместив частичные представления на мастерской странице. Однако часто оказывается удобным вынести функциональность гаджета в отдельное представление и полностью отделить логику гаджета от основных представлений. В поставку MVC Framewrok функциональность по созданию гаджетов не входит, однако она доступна в проекте MVC Futures. Скачать код и сборку MVC Futures можно на странице проекта MVC Framework на портале CodePlex. После подключения этой сборки к проекту функциональность по созданию гаджетов будет доступна в проекте.

Примечание

В проект MVC Futures входит код, не вошедший по каким-либо причинам в основную поставку MVC Framework. Причины могут быть разными — от недостаточной стабильности кода до желания разработчиков придумать лучшее решение в следующей версии. Однако вас не должна страшить потенциальная возможность того, что поддержка гаджетов никогда не будет включена в том виде, в котором она представлена в MVC Futures, в сам MVC Framework, поскольку вам доступен полный исходный MVC Futures, и вы можете использовать его непосредственно в ваших проектах. Более того, вы можете выделить только ту часть исходного кода, которая используется в ваших проектах, и перенести его из сборки MVC Futures Microsoft.Web.Mvc.dll в сборку вашего проекта.

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

Собственно все, что необходимо для создания гаджетов — это вспомогательный метод Html.RenderAction, который позволяет включить на страницу вывод произвольного действия произвольного контроллера. Например, на некоторых страницах сайта нужно добавить независимый блок, выводящий информацию о текущем курсе доллара. Для этого создается частичное представление, разметка которого приведена в листинге 5.17, и контроллер, код которого приведен в листинге 5.18.

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

"Если бы не сталинские репрессии!". Как Вождь спас СССР.

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

Средневековая история. Тетралогия

Гончарова Галина Дмитриевна
Средневековая история
Фантастика:
фэнтези
попаданцы
9.16
рейтинг книги
Средневековая история. Тетралогия

Взломщик

Грач Игорь
Вселенная EVE Online
Фантастика:
космическая фантастика
6.94
рейтинг книги
Взломщик

Снежная королева

Виндж Джоан
1. Снежная королева
Фантастика:
научная фантастика
8.50
рейтинг книги
Снежная королева

Князь Андер Арес 4

Грехов Тимофей
4. Андер Арес
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Князь Андер Арес 4

Кодекс Охотника. Книга XXXIV

Винокуров Юрий
34. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXIV

Байка о том, как Лиса и Красная Королева о рае мечтали

Клауд Чак
1. Байки безумца Клауда
Фантастика:
юмористическая фантастика
5.00
рейтинг книги
Байка о том, как Лиса и Красная Королева о рае мечтали

Антарктида: Четвертый рейх

Сушинский Богдан Иванович
Секретный фарватер
Фантастика:
альтернативная история
5.33
рейтинг книги
Антарктида: Четвертый рейх

Поздний бунт. Андрей Старицкий

Ананьев Геннадий Андреевич
Рюриковичи
Проза:
историческая проза
5.00
рейтинг книги
Поздний бунт. Андрей Старицкий

Эмоции и чувства

Ильин Евгений Павлович
Научно-образовательная:
психология
7.00
рейтинг книги
Эмоции и чувства

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

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

"Фантастика 2023-139". Компиляция. Книги 1-20

Поселягин Владимир Геннадьевич
Фантастика 2023. Компиляция
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Фантастика 2023-139. Компиляция. Книги 1-20

Анубис

Хольбайн Вольфганг
Фантастика:
фэнтези
ужасы и мистика
8.31
рейтинг книги
Анубис

На дальних мирах (сборник)

Силверберг Роберт
Шедевры фантастики
Фантастика:
юмористическая фантастика
космическая фантастика
5.00
рейтинг книги
На дальних мирах (сборник)