Читать книгу 📗 "Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю"
public async IViewComponentResult Invoke(){}Когда компонент представления визуализируется из представления, вызывается открытый метод
Invoke()/InvokeAsync()IViewComponentResultPartialViewResultInvoke()ViewViewComponentResultMakeContentViewComponentResultpublic IViewComponentResult Invoke(){ var makes = _makeRepo.GetAll().ToList(); if (!makes.Any()) { return new ContentViewComponentResult("Unable to get the makes"); } return View("MenuView", makes);}Вспомогательный метод
View()ViewComponentControllerDefault.cshtmlView()Controller.cshtmlViews/< controller>/Components/<имя_компонента_представления>/<view_name>Views/Shared/Components/<имя_компонента_представления>/<view_name>Pages/Shared/Components/<имя_компонента_представления>/<view_name>На заметку! В версии ASP.NET Core 2.x появился еще один механизм для создания веб-приложений, который называется Razor Pages, но в этой книге он не рассматривается.
Класс C# может находиться где угодно (даже в другой сборке), но файл
<имя_представления>.cshtmlПостроение частичного представления
Частичное представление, визуализируемое классом
MenuViewComponentMakeСоздайте внутри каталога
ViewsSharedComponentsMenuViewComponentMenuMenuView.cshtmlУдалите существующий код и поместите в файл показанную ниже разметку:
@model IEnumerable<Make><div class="dropdown-menu"><a class="dropdown-item text-dark" asp-area="" asp-controller="Cars" asp-action="Index">All</a>@foreach (var item in Model){ <a class="dropdown-item text-dark" asp-controller="Cars" asp-action="ByMake" asp-route-makeId="@item.Id" asp-route-makeName="@item.Name">@item.Name</a>}</div>Вызов компонентов представлений
Компоненты представлений обычно визуализируются из представления (хотя их можно визуализировать также из метода действия контроллера). Синтаксис довольно прямолинеен:
Component.Invoke(<имя_компонента_представления>)@await Component.InvokeAsync(<имя_компонента_представления>)ViewComponent@await Component.InvokeAsync("Menu") // асинхронная версия@Component.Invoke("Menu") // синхронная версияВызов компонентов представлений как специальных вспомогательных функций дескрипторов
Появившиеся в ASP.NET 1.1 компоненты представлений можно вызывать с использованием синтаксиса вспомогательных функций дескрипторов. Вместо применения
Component.InvokeAsync()/Component.Invoke()<vc:menu></vc:menu>В приложении потребуется разрешить использование такого способа вызова компонентов представлений, что делается добавлением команды
@addTagHelper_ViewImports.cshtml