Представления в ASP.NET Core MVC. Частичные представления

Наряду с обычными представлениями и макетами, в ASP.NET Core MVC также используются частичные представления (partial view). Частичные представления могут встраиваться в обычные представления и, обычно, используются для разбивки сложных представлений на более простые. Рассмотрим, как мы можем использовать частичные представления в нашем приложении.

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

Вернемся к нашему приложению. На данный момент у нас в приложении имеется импровизированная админка со своим макетом, а структура проекта выглядит следующим образом:

Админ.панель выглядит следующим образом:

Допустим, нам необходимо сделать так, чтобы помимо главного меню админки (Записи | Пользователи) на каждой странице админ.панели также показывалось дополнительное меню. Технически мы могли бы вынести его и в макет, а можно использовать для этого частичное представление. Добавим в папку Views/Admin новый файл, который назовем PartialMenu.cshtml:

Код представления сделаем чисто номинальным:

<p>Меню для админпанели</p>

Теперь попробуем встроить это представление в страницы админпанели.

Встраивание частичного представления в обычное

Чтобы встроить частичное представление в обычное мы можем использовать следующую конструкцию Razor:

@await Html.PartialAsync("PartialMenu")

в качестве параметра для PartialAsync() указывается имя частичного представления. Теперь мы можем запустить приложение и посмотреть на результат:

Метод Html.PartialAsync() встраивает код частичного представления в обычное. Он является асинхронным и возвращает объект IHtmlContent, который представляет html-содержимое.

Также, частичное представление можно встроить в обычное с использованием метода — Html.RenderPartialAsync(). Этот метод также принимает имя представления, но используется только в явных выражениях кода Razor, то есть обрамляется фигурными скобками:

@{
    await Html.RenderPartialAsync("PartialMenu");
}

Метод Html.RenderPartialAsync() напрямую пишет вывод в выходной поток в асинхронном режиме, поэтому может работать чуть быстрее, чем Html.PartialAsync.

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

За рендеринг частичных представлений отвечает объект PartialViewResult, который возвращается методом PartialView(). Этот метод имеет четыре версии:

public virtual PartialViewResult PartialView()
  • model — объект, содержащий необходимые данные, используемые для рендеринга частичного представления
  • viewName — имя частичного представления
public virtual PartialViewResult PartialView(string? viewName)
public virtual PartialViewResult PartialView(object? model)
public virtual PartialViewResult PartialView(string? viewName, object? model)

Например, мы можем определить следующее действие в контроллере AdminController:

public IActionResult PartialMenu() 
{
    return PartialView();
}

Теперь запустим приложение и проверим рендеринг частичного представления:

Для частичного представления используются те же правила поиска необходимого файла, что и для обычных представлений. То есть, в данном случае, поиск файла осуществлялся по названию действия в контроллере, то есть искали файл PartialMenu.cshtml

Передача данных в частичное представление

Для передачи данных в частичное представление используется модель представления, которую мы уже рассматривали здесь. Например, передадим в представление список пунктов меню. Код частичного представления:

@model IEnumerable<string>

<ul>
    @foreach(string item in Model)
    {
        <li>@item</li>
    }
</ul>

Теперь изменим код представлений.

Admin/Index.cshtml

@{
    //Layout = "~/Views/Shared/_AdminLayout.cshtml";
    ViewBag.Title = "Записи блога";
}
<h2>Все записи блога</h2>
@{
    await Html.RenderPartialAsync("PartialMenu", new[] { "Добавить", "Удалить", "Редактировать"});
}

Admin/Users.cshtml

@{
    
    ViewBag.Title = "Пользователи";
}

<h2>Пользователи блога</h2>
@await Html.PartialAsync("PartialMenu", new[]{ "Читатели","Модераторы","Администраторы"})

<button>Добавить пользователя</button>

Запустим приложение и посмотрим результат:

 

Итого

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

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии