Перейти к содержанию

Фильтры страниц: настройка привязки модели для Razor Pages

Фильтры действий применяются только к контроллерам и действиям, но не страницам Razor. Аналог для Razor Pages - фильтры страниц, которые, в свою очередь, не применяются к контроллерам и действиям.

ASP.NET Core включает в себя несколько готовых фильтров страниц. Например, есть фильтр PageResponseCacheFilter, аналогичный ResponseCacheFilter.

Фильтры страниц необычны, так как реализуют три метода. Специфический третий метод OnPageHandlerSelected выполняется после выбора обработчика страницы и перед привязкой модели. Однако, на практике он используется редко, и фильтры страниц исполняют роль, аналогичную фильтрам действий.

Тонкое различие заключается в том, что фильтр действий обращается к аргументам действий через context.ActionArguments, тогда как фильтр страниц может обращаться к context.HandlerArguments. Однако, в этом случае есть другой вариант.
Страницы Razor часто привязываются к открытым свойствам PageModel с использованием атрибута [BindProperty]. К этим свойствам можно получить доступ напрямую, приведя свойство HandlerInstance к правильному типу PageModel:

var recipeId = ((ViewRecipePageModel)context.HandlerInstance).Id;

Аналогично фильтрам действий, базовый класс PageModel реализует IPageFilter и IAsyncPageFilter, соответственно, есть возможность создать фильтр для одной страницы, переопределив нужны методы прямо в PageModel.


Последнее обновление : 3 октября 2022 г.
Дата создания : 3 октября 2022 г.

Комментарии

Комментарии