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

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

Жанры

Шрифт:

Частичное представление содержит ту же самую разметку и строится по тем же принципам, что и представление. Пример разметки упомянутого ранее частичного представления 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 уже рассматривалось размещение файлов в директории проекта, однако сейчас остановимся на этой теме подробнее.

Все файлы, относящиеся к представлениям, размещаются внутри директории 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. Жития святых на русском языке, изложенные по руководству Четьих-Миней святого Димитрия Ростовского
Религия и эзотерика:
религия
православие
христианство
5.00
рейтинг книги
Жития святых на русском языке, изложенные по руководству Четьих-Миней святого Димитрия Ростовского. Книга девятая. Май

Сатанизм для интеллигенции

Кураев Андрей Вячеславович
Научно-образовательная:
религиоведение
7.00
рейтинг книги
Сатанизм для интеллигенции

Риф яркости

Брин Дэвид
4. Возвышение
Фантастика:
научная фантастика
7.50
рейтинг книги
Риф яркости

Polo или зеленые оковы

Зайцев Алексей
Фантастика:
юмористическая фантастика
космическая фантастика
6.25
рейтинг книги
Polo или зеленые оковы

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

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

Сан-Феличе. Книга вторая

Дюма-отец Александр
Приключения:
исторические приключения
6.00
рейтинг книги
Сан-Феличе. Книга вторая

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

Демина Карина
Фантастика 2023. Компиляция
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
Фантастика 2023-134. Компиляция. Книги 1-22

Скрытая Империя

Андерсон Кевин Джей
1. Сага Семи Солнц
Фантастика:
научная фантастика
6.25
рейтинг книги
Скрытая Империя

Стальное зеркало

Оуэн Анна Нэнси
Фантастика:
фэнтези
альтернативная история
5.00
рейтинг книги
Стальное зеркало

Зарождение общества будущего

Лайтман Михаэль Семенович
Научно-образовательная:
прочая научная литература
религиоведение
5.00
рейтинг книги
Зарождение общества будущего

Стеллар. Компиляция. Книги 1-9

Прокофьев Роман Юрьевич
Стеллар
Фантастика:
киберпанк
рпг
постапокалипсис
технофэнтези
5.00
рейтинг книги
Стеллар. Компиляция. Книги 1-9

Переворот.ru

Маркеев Олег Георгиевич
7. Странник
Фантастика:
детективная фантастика
5.00
рейтинг книги
Переворот.ru

Академия

Сай Ярослав
2. Медорфенов
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Академия

Вихри Мраморной арки

Уиллис Конни
9. Сны разума
Фантастика:
научная фантастика
5.00
рейтинг книги
Вихри Мраморной арки