Раскрывающийся список с использованием Entity Framework на странице _layout - PullRequest
0 голосов
/ 30 марта 2019

Использование бритвенных страниц. Я хочу выпадающий список в заголовке, который создается в _Layout.cshtml. Это будет заполнено запросом к базе данных EF на основе идентификатора пользователя для входа. Этот список будет глобальным фильтром для любого из запросов. Он должен реагировать на изменение выбора. Он будет использовать куки для отслеживания от сессии к сессии. Тогда каждая страница, которая отображает данные, сможет получить доступ к этому значению и отфильтровать результаты. Каждая страница может просто прочитать значение cookie или иметь некоторый доступ к значению в раскрывающемся списке.

Пробовал с использованием частичного и просмотра компонента. В любом случае не работает, потому что он всегда пытается передать модель вызывающей страницы (индекс, создать, отчет), так как она загружается каждой, а не точно _Layout, который не имеет модели. Итак, теперь я не могу использовать модель в Частичном или Просмотреть компонент для связывания выпадающего списка.

Мне также не удалось заставить выпадающий список изменить событие OnPostAsync.

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

1 Ответ

0 голосов
/ 30 марта 2019

Вы можете создать базовый класс для ваших контроллеров, который добавляет необходимые данные в ViewBag при каждом запросе.Примечание. Следующий код основан на ASP.NET MVC, а не на ASP.NET Core, но на самом деле процесс аналогичен.

public class ApplicationControllerBase : ControllerBase
{
    protected override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        // use ViewResultBase, if you need logic for both full and partial views. Since you want to add info for the _Layout page, ViewResult is better.
        if (filterContext.Result is ViewResult viewResult)
        {
            // Give the ViewBag item a unique name, that will not be used elsewhere, so you don't overwrite anything by accident.
            // Use the data from ViewBag to populate your dropdown.
            viewResult.ViewBag.DropDownItems = GetDropDownItems(); // implement GetDropDownItems accordingly, preferrably with caching!
        }
        base.OnResultExecuting(filterContext);
    }
}

Что касается второй части вашего вопроса о вызове OnPostAsync, когда DropDownListизменяет его значение: Да, вы можете использовать JS для этого, если вы не хотите добавить дополнительную форму вокруг него с помощью дополнительной кнопки отправки.Форма может иметь смысл в любом случае, но вы можете использовать обработчик onchange для немедленной отправки формы, когда значение раскрывающегося списка меняется, вместо того, чтобы требовать ручную отправку формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...