Как получить доступ к свойству компонента представления со страницы Razor

У меня есть страница Razor, где я включаю один компонент представления, который в основном представляет собой простой <select>. Цель состоит в том, чтобы использовать этот компонент для повторного использования логики фильтра данных.

Файл Default.cshtml подобен приведенному ниже, вспомогательный тег scripts для on-content-loaded взят из здесь.

    @model SomeNamespace.UserNetworksSelectorModel
    @inject Microsoft.AspNetCore.Mvc.Localization.IViewLocalizer Localizer

    <form method="get">
        <select asp-for="@Model.NetworkId" asp-items="@Model.NetworkItems" class="form-control user-network-selector"></select>
    </form>

    <script type="text/javascript" on-content-loaded="true">
        $(function () {
            $('.user-network-selector').change(function () {
                this.form.submit();
            });
        })
    </script>

Модель имеет свойства public IList<SelectListItem> NetworkItems { get; set; } и public int NetworkId { get; set; } (не включены сюда для простоты).

На странице я включаю компонент представления, используя вспомогательную функцию тега <vc:user-networks-selector></vc:user-networks-selector>, аналогичную @await Component.InvokeAsync(typeof(SomeNamespace.ViewComponents.UserNetworksSelector)).

Мой вопрос: как я могу получить доступ из методов в PageModel к статусу в компоненте представления? Меня интересует доступ к значениям свойств NetworkItems и NetworkId его модели.

Плохо ли использовать такие компоненты представления?


person V.Lorz    schedule 16.06.2021    source источник
comment
Можете ли вы объяснить более подробно о доступе к свойству компонента представления со страницы Razor? К какому свойству View Component вы хотите получить доступ? Как правило, при использовании компонента представления мы используем его для рендеринга данных на главной странице: мы будем передавать параметр из основного представления, а затем фильтровать данные на основе параметра в компоненте представления, после чего результаты рендеринга отображаются на главной странице. Итак, я не уверен в доступе к свойству компонента представления на странице бритвы, пожалуйста, объясните об этом подробнее. Если возможно, можете ли вы поделиться образцом через Github или Onedrive? Тогда мы можем работать вместе, чтобы понять это.   -  person Zhi Lv    schedule 17.06.2021
comment
В компонент представления я включил один элемент <select>, который заполняется, когда его метод InvokeAsync вызывается из основного представления. Компонент управляет выбранным элементом в <select> в соответствии с одним параметром запроса, он также заставляет страницу GET отправляться при изменении выбора, устанавливая затем новое значение в параметре запроса. Я думаю, что компонент может иметь одно свойство SelectedItemId для представления выбранного элемента, которое можно было бы прочитать с главной страницы. Здесь я думаю, что ошибаюсь, поскольку компонент будет делать больше, чем просто отображать некоторый контент.   -  person V.Lorz    schedule 17.06.2021