У меня есть страница 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
его модели.
Плохо ли использовать такие компоненты представления?
<select>
, который заполняется, когда его методInvokeAsync
вызывается из основного представления. Компонент управляет выбранным элементом в<select>
в соответствии с одним параметром запроса, он также заставляет страницу GET отправляться при изменении выбора, устанавливая затем новое значение в параметре запроса. Я думаю, что компонент может иметь одно свойствоSelectedItemId
для представления выбранного элемента, которое можно было бы прочитать с главной страницы. Здесь я думаю, что ошибаюсь, поскольку компонент будет делать больше, чем просто отображать некоторый контент. - person V.Lorz   schedule 17.06.2021