c# - Razor Pages - 在所有 OnGet 处理程序之后从基类调用方法

标签 c# asp.net-core razor-pages

我有一个继承自 PageModel 的基类(称为 BmsPageModel)。 BmsPageModel 中有一个方法,我需要在每个页面上调用它,以便可以根据权限正确填充菜单。

如何让从我的基类继承的每个页面在每个 OnGet 处理程序期间/之后调用此方法,而无需在每个页面中手动键入它?

最佳答案

我喜欢从问题中学到新东西。感谢@MikeBrind 的评论和以下链接(Learn Page FiltersPage Filters 上的 MS 文档)我可以回答这个问题并更新我的代码。

我还有一个基类,它在 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
    }
}

关于c# - Razor Pages - 在所有 OnGet 处理程序之后从基类调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55030251/

相关文章:

c# - Alt+Insert 上的 Resharper 区域选项

c# - System.Text.Json 自定义 JsonConverter 从未调用过

c# - BlockingCollection<T> 使用 TPL 数据流进行批处理

c# - 在 ASP.NET Core 中尽快获取当前 URL program.cs/startup.cs

c# - 作用域/ transient 依赖注入(inject)确保返回相同的接口(interface)和实现实例

Asp.net core razor View 未格式化

c# - 如何在 Razor Page OnInitialized 事件中使用 404 路由

asp.net-core - Razor Pages 路由技术

c# - 我可以获取 MouseOver 事件来显示 ListView 控件中项目的小对话框吗?

c# - WPF 中的 Ninject 构造函数注入(inject)