Asp.net mvc framework
Шрифт:
Частичное представление содержит ту же самую разметку и строится по тем же принципам, что и представление. Пример разметки упомянутого ранее частичного представления LogOnUserControl.ascx показан в листинге 5.3. Разметка, приведенная в листинге 5.3, подробно рассматривается далее.
Листинг 5.3. Разметка частичного представления LogOnUserControl.ascx
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%
if (Request.IsAuthenticated) {
%>
%></b>!
[ <%= Html.ActionLink("Выход", "LogOff", "Account") %> ]
<%
}
else {
%>
[ <%= Html.ActionLink("Вход", "LogOn", "Account") %> ]
<%
}
%>
Частичные представления могут быть использованы также при создании многократно используемых функциональных блоков на разных страницах (часто называемых гаджетами), о которых речь пойдет в конце этой главы.
Файлы представлений в структуре проекта
В главе 1 уже рассматривалось размещение файлов в директории проекта, однако сейчас остановимся на этой теме подробнее.
Все файлы, относящиеся к представлениям, размещаются внутри директории Views, во вложенных директориях, соответствующих названиям контроллеров, использующих эти представления, либо внутри директории Shared, содержащей представления, мастерские страницы и частичные представления, используемые разными контроллерами.
Допустим, что в проекте присутствуют два контроллера: HomeController и AccountController, тогда структура директории Views выглядит следующим образом:
? Account — в этой директории содержатся представления, используемые действиями контроллера Account.
? Home — в этой директории содержатся представления, используемые действиями контроллера Home.
? Shared — в этой директории содержатся мастерские страницы, частичные представления и представления, которые могут быть использованы всеми контроллерами, например, страница с информацией об ошибке, возникшей во время выполнения действия контроллера.
? Из действия контроллера можно обратиться к представлению, находящемуся в любой из директорий, указав полный путь к представлению. Аналогично, представление может использовать частичные представления, размещенные в разных директориях, с указанием полного пути к ним, однако такой подход приводит к путанице, и мы настоятельно рекомендуем группировать представления, относящиеся к одному контроллеру, в одну директорию.
? В случае, когда нескольким контроллерам может понадобиться использовать одну и ту же разметку представления, стоит подумать о будущем развитии проекта и выбрать один из двух путей.
? Разметка всегда будет одинакова для обоих контроллеров — в этом случае представление следует разместить в директории Shared.
? Разметка может в будущем различаться — в этом случае общую разметку следует вынести в файл частичного представления и поместить в директорию Shared, а для каждого из контроллеров создать собственное представление. Не
? Директория Views предназначена только для файлов представлений, обрабатываемых механизмом генерации представлений, статические файлы, используемые на страницах (js, .css, изображения), следует размещать в других директориях. Например, в шаблонном проекте MVC Application, создаваемом Visual Studio, предлагается использовать для статических файлов директорию Content, а для скриптов .js директорию Scripts. Здесь уже выбор может определяться полностью вашим вкусом. Неплохой идеей может быть создание директории Content с вложенной структурой директорий, повторяющей структуру директории Views, где статические файлы будут размещены по тому же принципу, что и в директории Views. Возможно, что вам будет удобнее создать иную структуру директорий и группировать статические файлы не по принадлежности к представлениям, а по расположению звезд на небосклоне или какой-либо другой логике.
Данные для отображения и ViewData
В главе 1 кратко был описан механизм передачи данных от контроллера представлению. Поскольку основной задачей представления является отображение данных, мы подробно остановимся на этой теме.
ViewData — это класс типа viewDataDictionary, из названия типа которого очевидно, что ViewData представляет собой коллекцию типа ключ-значения, называемую словарем.
public class ViewDataDictionary : IDictionary<string, object> {}
Поскольку ViewData является коллекцией доступных по строковому ключу объектов, в ней может быть сохранено произвольное количество объектов разных типов.
public ActionResult ViewDataDemo
{
ViewData.Add("Hello", "World");
ViewData["Date"] = DateTime.Now;
return View;
}
Объекты, содержащиеся в коллекции ViewData, в свою очередь, могут быть использованы в разметке представления.
<%= ((DateTime)ViewData["Date"]).ToLongTimeString %>
Строгая типизация данных представления
Работа с произвольным набором элементов удобна, когда набор данных, отображаемых представлением, меняется в процессе развития проекта. Однако в случаях, когда все данные представления могут быть описаны одним классом, значительно удобнее использовать строго типизированные представления. Для этого коллекция ViewData предоставляет свойство ViewData.Model и возможность строгой типизации представления путем наследования самого класса представления от класса ViewPage<T>. В листинге 5.4 представлена разметка строго типизированного представления.
Жития святых на русском языке, изложенные по руководству Четьих-Миней святого Димитрия Ростовского. Книга девятая. Май
9. Жития святых на русском языке, изложенные по руководству Четьих-Миней святого Димитрия Ростовского
Религия и эзотерика:
религия
православие
христианство
рейтинг книги
Сатанизм для интеллигенции
Научно-образовательная:
религиоведение
рейтинг книги