Razor Pages - вызов метода из базового класса после всех обработчиков OnGet - PullRequest
2 голосов
/ 06 марта 2019

У меня есть базовый класс (называемый BmsPageModel), который наследуется от PageModel. В BmsPageModel есть метод, который мне нужно вызывать на каждой странице, чтобы меню можно было правильно заполнять на основе разрешений.

Как я могу заставить каждую страницу, которая унаследована от моего базового класса, вызывать этот метод во время / после каждого обработчика OnGet, не вводя его вручную на каждой странице?

1 Ответ

1 голос
/ 07 марта 2019

Мне нравится, когда я узнаю что-то новое из вопроса.Благодаря комментарию @ MikeBrind и следующим ссылкам ( Learn Page Filters и документу MS на Page Filters ) я могу ответить на этот вопрос и обновить свой код.

Iтакже есть базовый класс, который устанавливает глобальный фильтр запросов для DbContext, чтобы данные каждого пользователя отфильтровывались друг от друга.У меня есть общий метод (называемый PageLoadAsync), который я должен помнить, чтобы добавить к методам OnGet / OnPost каждой страницы.Теперь с переопределением исполняемых методов я могу добавить следующее, и нет необходимости добавлять метод в каждом подклассе.

public async override Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next) 
{
    await PageLoadAsync();
    await base.OnPageHandlerExecutionAsync(context, next);
}

Если вы хотите ограничить его только методом OnGet, вы можете сделать что-то вродеследующее:

public override void OnPageHandlerExecuting(PageHandlerSelectedContext context)
{
    if(context.HandlerMethod.MethodInfo.Name == nameof(OnGet))
    {
        // code placed here will only execute if the OnGet() method has been selected
    }
}
...