Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
В приложениях на ASP.NET MVC кроме обычных представлений и мастер-страниц можно также использовать частичные представления или partial views. Их отличительной особенностью является то, что их можно встраивать в другие обычные представления. Частичные представления могут использоваться также как и обычные, однако наиболее удобной областью их использования является рендеринг результатов AJAX-запроса. По своему действию частичные представления похожи на секции, которые использовались в прошлой теме, только их код выносится в отдельные файлы.
Частичные представления полезны для создания различных панелей веб-страницы, например, панели меню, блока входа на сайт, каких-то других блоков.
За рендеринг частичных представлений отвечает объект PartialViewResult, который возвращается методом PartialView
.
Итак, определим в контроллере HomeController новое действие GetMessage:
public class HomeController : Controller { public ActionResult GetMessage() { return PartialView("_GetMessage"); } //.................... }
Теперь добавим в папку Views/Home новое представление _GetMessage.cshtml, в котором будет простенькое содержимое:
<h3>Частичное представление</h3>
Теперь обратимся к методу GetMessage как к обычному действию контроллера, и оно нам вернет частичное представление:
По своему действию частичное представление похоже на обычное, только для него по умолчанию не определяется мастер-страница.
Теперь рассмотрим, как мы можем встраивать частичные представления в обычные. Для этого изменим представление Index.cshtml:
@{ ViewData["Title"] = "Home Page"; } <h2>Представление Index.cshtml</h2> @await Html.PartialAsync("_GetMessage")
Метод Html.PartialAsync()
встраивает код частичного представления в обычное. Он является асинхронным и возвращает объект
IHtmlContent
, который представляет html-содержимое и который обернут в объект
Task<TResult>
. В качестве параметра в метод передается имя представления:
Обращения к методу GetMessage()
в контроллере при этом не происходит.
Кроме метода Html.PartialAsync()
частичное представление можно встроить с помощью другого метода - Html.RenderPartialAsync.
Этот метод также принимает имя представления, только он используется не в строчных выражениях кода Razor, а в блоке кода, то есть обрамляется фигурными скобками:
@{await Html.RenderPartialAsync("_GetMessage");}
Html.RenderPartialAsync
напрямую пишет вывод в выходной поток в асинхронном режиме, поэтому может работать чуть быстрее, чем
Html.PartialAsync
.
Одна из перегруженных версий методов Html.PartialAsync / Html.RenderPartialAsync
позволяет передать модель в частичное представление. В итоге у нас получится стандартное строго типизированное представление.
Например, в качестве второго параметра список строк:
@await Html.PartialAsync("_GetMessage", new List<string> { "Lumia 950", "iPhone 6S", "Samsung Galaxy s 6", "LG G 4" })
Поскольку здесь в частичное представление передается список строк, то мы можем использовать модель List<string>, чтобы получить этот список. Теперь изменим частичное представление _GetMessage.cshtml:
@model IEnumerable<string> <h3>Список моделей</h3> <ul> @foreach(string s in Model) { <li>@s</li> } </ul>
И на веб-страницу будет передан список строк: