ViewComponentContext

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

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

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

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

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

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

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

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

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

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

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

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

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

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

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;

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

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

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

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

<h3>@ViewData["Header"]</h3>
<ul>
    @foreach (var user in ViewBag.Users)
    {
        <li>@user</li>
    }
</ul>

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

@await Component.InvokeAsync("UsersList")

или так

<vc:users-list />

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

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