Книга: ASP.NET MVC Framework

Мастерские страницы и элементы управления

Мастерские страницы и элементы управления

Из WebForms в механизм представлений в MVC пришел и подход к повторному использованию общей разметки страниц — мастерские страницы (master pages), файлы которых имеют расширение master. Мастерские страницы представляют собой инструмент для определения общего шаблона набора страниц, определяя общую разметку для набора контентных страниц и расположение блоков, содержащихся в контентных страницах.

Принцип построения мастерской страницы следующий:

1. Задается общий дизайн страницы и блоки, общие для набора страниц.

2. В разметке мастерской страницы определяются блоки, которые будут заполнены содержимым контентных страниц с помощью разметки:

<asp:ContentPlaceHolder runat="server" />

Пример мастерской страницы приведен в листинге 5.1.

3. При создании разметки контентных страниц используются блоки:

<asp:Content ContentPlaceHolderID="ContentPageId" runat="server">

где ContentPlaceHolderID соответствует тому фрагменту мастерской страницы, который помечен элементом ContentPlaceHolder с соответствующим свойством id. Пример контентной страницы приведен в листинге 5.2.

Листинг 5.1. Пример мастерской страницы

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>
    <asp:ContentPlaceHolder runat="server" />
  </title>
  <link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
</head>
<body>
  <div>
    <div>
      <div>
        <h1>
          Northwind
        </h1>
      </div>
      <div>
        <% Html.RenderPartial("LogOnUserControl"); %> </div>
        <div>
          <ul>
            <li>
              <%= Html.ActionLink("Домашняя", "Index",
                        "Home")%>
            </li>
            <li>
              <%= Html.ActionLink("O сайте", "About",
                        "Home")%>
            </li>
          </ul>
        </div>
      </div>
      <div>
        <asp:ContentPlaceHolder runat="server" /> <div>
      </div>
    </div>
  </div>
</body>
</html>

Листинг 5.2. Пример контентной страницы

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
           Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ContentPlaceHolderID="TitleContent" runat="server">
   о проекте
</asp:Content>
<asp:Content ContentPlaceHolderID="MainContent" runat="server">
  <h2>
    О проекте
  </h2>
  <p>
    Тут что-то написано.
  </p>
</asp:Content>

Мастерские страницы могут быть вложенными, т. е. в свою очередь использовать мастерские страницы. Это может быть полезно, когда существует общая планировка всех страниц на сайте (родительская мастерская страница) и несколько вариантов планировки дизайна вложенных разделов (дочерние мастерские страницы).

На контентной странице могут быть заданы несколько блоков Content, соответствующих блокам ContentPlaceHolder, определенным на мастерской странице.

Еще одним механизмом повторного использования разметки являются пользовательские элементы управления или, в терминах MVC, частичные представления. Частичные представления — это фрагменты разметки, вынесенные в отдельный файл с расширением ascx, которые могут быть использованы на страницах представлений через вызов метода RenderPartial() класса HtmlHelper. О классе Html и его методах подробнее рассказано далее в этой главе. Ранее в листинге 5.1 приведен пример отображения частичного представления LogOnUserControl.ascx (<% Html.RenderPartial("LogCnUserControl"); %>).

Частичное представление содержит ту же самую разметку и строится по тем же принципам, что и представление. Пример разметки упомянутого ранее частичного представления LogOnUserControl.ascx показан в листинге 5.3. Разметка, приведенная в листинге 5.3, подробно рассматривается далее.

 Листинг 5.3. Разметка частичного представления LogOnUserControl.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%
  if (Request.IsAuthenticated) {
%>
  Добро пожаловать <b><%= Html.Encode(Page.User.Identity.Name)
%></b>!
    [ <%= Html.ActionLink("Выход", "LogOff", "Account") %> ]
<%
  }
  else {
%>
    [ <%= Html.ActionLink("Вход", "LogOn", "Account") %> ]
<%
  }
%>

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

Оглавление книги


Генерация: 1.193. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз