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

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

Жанры

Шрифт:

}

}

Листинг 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.

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

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

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

Наполеон. Попытка № 2

Никонов Александр Петрович
Документальная литература:
биографии и мемуары
8.00
рейтинг книги
Наполеон. Попытка № 2

Мировая кабала. Ограбление по…

Катасонов Валентин Юрьевич
1. Иго иудейское
Документальная литература:
публицистика
8.85
рейтинг книги
Мировая кабала. Ограбление по…

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Было и будет. Дневник 1910 - 1914

Мережковский Дмитрий Сергеевич
Документальная литература:
публицистика
5.00
рейтинг книги
Было и будет. Дневник 1910 - 1914

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

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

Барон меняет правила

Ренгач Евгений
2. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон меняет правила

Я еще не царь

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

Вечный. Книга V

Рокотов Алексей
5. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга V

Забытые боги

Рокотов Алексей
4. Путь князя
Фантастика:
фэнтези
рпг
попаданцы
5.00
рейтинг книги
Забытые боги

На границе империй. Том 10. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 4

Дикие земли

Желязны Роджер Джозеф
Приключения:
вестерны
7.00
рейтинг книги
Дикие земли

Тактик

Земляной Андрей Борисович
2. Офицер
Фантастика:
альтернативная история
7.70
рейтинг книги
Тактик

Ваше Сиятельство 6

Моури Эрли
6. Ваше Сиятельство
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 6