Шрифт:
Вынесение оформления элемента списка в частичное представление позволяет разгрузить код разметки самого представления, а также повторно использовать оформление элемента представления на других представлениях, если это разумно с точки зрения логики приложения.
Создание гаджетов
Частичные представления также могут быть использованы для создания гаджетов — элементов страницы, содержащих данные, не связанные с основным представлением. Гаджеты находят широкое применение на страниц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.17. Частичное представление ExchangeRates.ascx
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<table style="border: solid 2px red; margin: 10px;">
<tr>
<td>
1 USD =
</td>
<td>
<%= ViewData["USD"] %> RUB
RUB
</td>
</tr>
</table>
Листинг 5.18. Контроллер GadgetsController
using System.Web.Mvc;
using MvcViewsDemo.Services;
namespace MvcViewsDemo.Controllers
{
public class GadgetsController : Controller
{
public ActionResult ExchangeRates
{
ViewData["USD"] = ExchangeRatesService.GetRate("USD");
return View;
}
}
}
Использовать гаджет ExchangeRates можно в любом представлении. Например, при использовании в представлении Index, код которого показан в листинге 5.19, получается результат, приведенный на рис. 5.4.
Листинг 5.19. Представление Index.aspx, использующее гаджет ExchangeRates
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace="Microsoft.Web.Mvc" %>
<%@ Import Namespace="MvcViewsDemo.Models" %>
<asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent"
runat="server">
Домашняя страница
</asp:Content>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent"
runat="server">
<h2>
<%= Html.Encode(ViewData["Message"]) %>
</h2>
<table>
<thead>
<tr>
<th>
Название компании
</th>
<th>
Контактное лицо
</th>
</tr>
</thead>
<% foreach (
Customer c in (IEnumerable<Customer>)ViewData["Customers"])