Реализация компонентов представления в приложении ASP.NET Core

Мы все знакомы с частичными представлениями: представлением, которое можно повторно использовать в веб-приложении и которое отображается как дочернее представление. Частичные представления могут быть возвращены из контроллера так же, как и обычные представления с использованием ViewResult. Частичный вид обычно визуализируется в основных видах с использованием метода @Html.Partial().

Компоненты представления были представлены в ASP.NET Core, что намного мощнее, чем частичные представления. Компоненты представления имеют свой собственный класс для написания логики и не зависят от контроллеров для своей реализации. Они также могут использовать возможности внедрения зависимостей. Например, вы хотите внедрить значки социальных сетей в свое приложение, но они динамически появляются с разными цветами и связанными с ними URL-адресами. Здесь можно использовать View Components.

Реализация:

Давайте реализуем компонент представления: RestaurantCountViewComponent.cs, который поможет нам получить общее количество ресторанов из базы данных.

Ваш проект -> Добавить RestaurantCountViewComponent.cs

Примечание. Не забудьте использовать ViewComponent в имени вашего класса, чтобы фреймворк знал, что это компонент представления, и с ним можно было обращаться соответствующим образом.

public class RestaurantCountViewComponent : ViewComponent
{
private IRestaurantData restaurantData { get; }
public RestaurantCountViewComponent(IRestaurantData _restaurantData)
{
this.restaurantData = _restaurantData;
}
public Task<IViewComponentResult> InvokeAsync()
{
var count = restaurantData.GetData("").Count();
return Task.FromResult<IViewComponentResult>(View(count));
}
}

Если мы внимательно посмотрим на приведенный выше код, мы увидим, что View Component — это класс C#, производный от базового класса ViewComponent. Он также поддерживает внедрение конструктора, и мы сделали это для IRestaurantData, который реализует наши операции с базой данных, поскольку нам понадобится метод GetData() для получения списка ресторанов из базы данных.

Если мы видим там метод InvokeAsync, мы можем загрузить наши данные, и он возвращает данные, завернутые в представление, которое в основном предназначено для отображения частичного представления с именем «По умолчанию».

Структура папок для создания этого частичного представления Default.cshtml должна быть следующей:

В нашей общей папке мы сохраняем структуру -> Компоненты -> RestaurantCount -> Default.cshtml

Внутри Default.CSS HTML я написал некоторый код для отображения количества ресторанов:

@model int
There are @Model Restaurants
<a asp-page="./List" class="btn btn-default" style="color: blue;">View All</a>

Опубликуйте, что мы можем вызывать ViewComponents из любого места внутри представления. Я добавил в нижний колонтитул _Layout.cshtml, чтобы счетчик был виден во всем приложении:

<vc:restaurant-count></vc:restaurant-count>

Как это выглядит:

Если вам понравилось читать эту статью, похлопайте ей. Вы можете связаться со мной в разделе комментариев, если у вас есть какие-либо вопросы или предложения.