ViewComponentContext

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

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

  • HttpContext: представляет контекст, который описывает полученный запрос, а также отправляемый ответ

  • ModelState: представляет состояние модели в виде объекта ModelStateDictionary

  • Request: возвращает контекст запроса в виде объекта HttpRequest

  • RouteData: возвращает данные маршрута

  • Url: представляет объект IUrlHelper, который используется для генерации адресов URL

  • User: представляет текущего пользователя в виде объкта IPrincipal

  • ViewBag: представляет динамический объект, который может использоваться для передачи данных в представление

  • ViewContext: описывает контекст главного представления, в котором вызывается компонент

  • ViewComponentContext: представляет объект ViewComponentContext, который инкапсулирует контекст компонента

  • ViewData: возвращает объект ViewDataDictionary, который применяется для передачи данных в представление

Используем некоторые и этих свойств. Пусть код компонента будет выглядеть следующим образом:

using Microsoft.AspNetCore.Mvc;

namespace MvcApp.Components
{
    public class UsersListViewComponent : ViewComponent
    {
        List<string> users = new()
        {
            "Tom", "Tim", "Bob", "Sam", "Alice", "Kate"
        };
        public IViewComponentResult Invoke()
        {
            int number = users.Count;
            // если передан параметр number
            if (Request.Query.ContainsKey("number"))
            {
                int.TryParse(Request.Query["number"], out number);
            }

            ViewBag.Users = users.Take(number);
            ViewData["Header"] = $"Количество пользователей: {number}.";
            return View();
        }
    }
}

Итак, в компоненте определены некоторые начальные данные - список users. В методе Invoke получаем из строки запроса параметр "number", который призван указать, сколько пользователей надо вывести на веб-страницу. сли параметр не указан, то просто передаем всех пользователей. А с помощью объектов ViewBag и ViewData передаем данные в представление.

Допустим, данный компонент будет использоваться контроллером HomeController. И для представлений компонента определим папку Views/Home/Components/UsersList и в ней определим представление Default.cshtml со следующим кодом:

<h2>@ViewData["Header"]</h2>
<ul>
    @foreach (var user in ViewBag.Users)
    {
        <li>@user</li>
    }
</ul>
контекст компонента представления в ASP.NET Core MVC и C#

Вызовем компонент в главном представлении:

@await Component.InvokeAsync("UsersList")

или так

<vc:users-list />

И после этого через параметр number мы сможем изменять количество выводимых пользователей:

Контекст в View Component в ASP.NET Core MVC и C#
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850