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

Последнее обновление: 23.03.2022

Кроме обычных представлений и мастер-страниц в ASP.NET Core MVC также можно использовать частичные представления или partial views. Их отличительной особенностью является то, что их можно встраивать в другие обычные представления. Частичные представления могут использоваться также как и обычные, однако наиболее удобной областью их использования является рендеринг результатов AJAX-запроса. По своему действию частичные представления похожи на секции, которые использовались в прошлой теме, только их код выносится в отдельные файлы.

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

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

  • PartialView(): для генерации ответа используется представление, которое по имени совпадает с вызывающим методом

  • PartialView(string? viewName): в метод передается имя представления, что позволяет переопределить используемое по умолчанию представление

  • PartialView(object? model): передает в представление данные в виде объекта model

  • PartialView(string? viewName, object? model): переопределяет имя представления и передает в него данные в виде объекта model

Итак, определим в контроллере HomeController действие Hello, которое будет использовать частичное представление:

using Microsoft.AspNetCore.Mvc;

namespace MvcApp.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
        public IActionResult Hello()
        {
            return PartialView();
        }
    }
}

Теперь добавим в папку Views/Home новое представление Hello.cshtml, в котором будет простенькое содержимое:

<h2>Hello View</h2>
Partial views в ASP.NET Core MVC и C#

Теперь обратимся к методу Hello как к обычному действию контроллера, и оно нам вернет частичное представление:

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

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

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

Теперь рассмотрим, как мы можем встраивать частичные представления в обычные. Для этого изменим представление Index.cshtml:

<h1>Index View</h1>

@await Html.PartialAsync("Hello")

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

Html.PartialAsync в ASP.NET Core MVC и C#

Обращения к методу Hello() в контроллере при этом не происходит.

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

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

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

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

Одна из перегруженных версий методов Html.PartialAsync / Html.RenderPartialAsync позволяет передать модель в частичное представление. В итоге у нас получится стандартное строго типизированное представление. Например, в качестве второго параметра список строк:

<h1>Welcome</h1>

@await Html.PartialAsync("Hello", new List<string>{"Hello", "Привет", "Hallo", "Salut"})

Поскольку здесь в частичное представление передается список строк, то мы можем использовать модель List<string>, чтобы получить этот список. Теперь изменим частичное представление Hello.cshtml:

@model IEnumerable<string>
<ul>
    @foreach(string s in Model)
    {
        <li>@s</li>
    }
</ul>

И на веб-страницу будет передан список строк:

Html.PartialAsync и передача данных в частичное представление ASP.NET Core MVC и C#
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850