Частичные представления

110

Часто возникает необходимость в использовании одних и тех же фрагментов дескрипторов Razor и разметки HTML в разных местах приложения. Вместо дублирования содержимого можно применять частичные представления. Это отдельные файлы представлений, содержащие фрагменты дескрипторов и разметки, которые могут быть включены в другие представления. В этой статье будет показано, как создавать и использовать частичные представления, объяснена их работа и продемонстрированы приемы, доступные для передачи данных представления в частичное представление.

Создание частичного представления

Для начала построим частичное представление по имени MyPartial. Щелкните правой кнопкой мыши на папке /Views/Shared, выберите в контекстном меню пункт Add --> View. Среда Visual Studio откроет диалоговое окно Add View. В поле View Name (Имя представления) введите MyPartial, в списке Template (Шаблон) выберите вариант Empty (without model) (Пустой (без модели)) и включите флажок Create as a partial view (Создать как частичное представление), как показано на рисунке ниже:

Создание частичного представления

Щелкните на кнопке Add и Visual Studio создаст частичное представление, которое изначально является пустым. В него следует добавить содержимое, приведенное в примере ниже:

<div>
    Это текст из частичного представления.
    @Html.ActionLink("Ссылка на метод действия Index", "Index")
</div>

Цель заключается в демонстрации возможности смешивания в частичном представлении разметки HTML и дескрипторов Razor, поэтому было определено простое сообщение и вызван вспомогательный метод ActionLink(). Частичное представление используется за счет вызова вспомогательного метода Html.Partial() внутри другого представления. Чтобы показать это, в файл представления ~/Views/Common/List.cshtml внесены необходимые изменения:

@{
    ViewBag.Title = "List";
    Layout = null;
}

<em>Это файл представления <b>~/Views/Common/List.cshtml</b></em>
<br /><br />
@Html.Partial("MyPartial")

Имя файла частичного представления указывается без расширения. Механизм визуализации будет искать частичное представление в обычных местоположениях, т.е. в папках /Views/Home и /Views/Shared в случае рассматриваемого примера, поскольку метод Html.Partial() был вызван внутри представления, визуализируемого для контроллера Home. (Переменная Layout была установлена в null, так что указывать разделы, определенные в файле _Layout.cshtml в предыдущей статье, не понадобится.)

Механизм визуализации Razor ищет частичные представления тем же способом, что и обычные представления (в папках ~/Views/<контроллер> и ~/Views/Shared). Это значит, что можно создавать специализированные версии частичных представлений, специфичные для контроллера, и переопределять частичные представления с таким же именем из папки Shared. Хоть это может показаться странным, но одним из наиболее распространенных применений частичных представлений является визуализация содержимого в компоновках, поэтому данная возможность очень полезна.

Запустив приложение и перейдя на URL вида /Home/List, можно получить результат, показанный на рисунке:

Результат использования частичного представления

Вызов вспомогательного метода ActionLink() в частичном представлении получает информацию о контроллере из обрабатываемого запроса. Это означает, что при указании метода Index() элемент <a> будет ссылаться на контроллер Home, т.к. именно данный контроллер привел к визуализации частичного представления. Если использовать частичное представление внутри представления, визуализируемого другим контроллером, то ActionLink() взамен сгенерирует ссылку на этот контроллер.

Использование строго типизированных частичных представлений

Можно создать строго типизированное частичное представление и во время его визуализации передавать ему используемые объекты модели представления. Для демонстрации этой возможности в папке /Views/Shared будет создано новое строго типизированное частичное представление по имени MyStronglyTypedPartial.cshtml.

На этот раз вместо применения варианта с созданием шаблона, в контекстном меню выбирается пункт Add --> MVC 5 View Page (Razor) (Добавить --> Страница представления MVC 5 (Razor)). В качестве имени представления указывается MyStronglyTypedPartial. Щелчок на кнопке ОК приводит к созданию представления. Как объяснялось в предыдущем разделе, этот файл не содержит ничего такого, что помечало бы его как частичное представление, а роль играет только способ, которым он используется в приложении.

Стандартное содержимое, которое Visual Studio добавляет в новые файлы представлений, необходимо заменить разметкой, приведенной в примере ниже:

@model IEnumerable<string>
<div>
    <h2>Названия фруктов</h2>
    <ul>
        @foreach (string fruit in Model)
        {
            <li>@fruit</li>
        }
    </ul>
</div>

С помощью Razor-дескриптора @foreach содержимое объекта модели представления отображается в виде элементов списка HTML. Чтобы продемонстрировать работу этого частичного представления, файл /Views/Common/List.cshtml был соответствующим образом модифицирован:

@{
    ViewBag.Title = "List";
    Layout = null;
}

<em>Это файл представления <b>~/Views/Common/List.cshtml</b></em>
<br /><br />

@Html.Partial("MyPartial")
@Html.Partial("MyStronglyTypedPartial",
    new List<string> { "Яблоко", "Апельсин", "Груша" })

Отличие от предыдущего примера состоит в том, что здесь вспомогательному методу Partial() передается дополнительный аргумент, который определяет объект модели представления. Для просмотра строго типизированного частичного представления в работе необходимо запустить приложение и перейти на URL вида /Home/List:

Результат использования строго типизированного частичного представления
Пройди тесты
Лучший чат для C# программистов