首页 > 解决方案 > 如何使 IActionFilter 可用于剃须刀页面?

问题描述

我有这个过滤器:

public class ViewBagFilter : IActionFilter
{
    private readonly ApplicationDbContext db;

    public ViewBagFilter(ApplicationDbContext _dbContext)
    {
        db = _dbContext;
    }

    public void OnActionExecuting(ActionExecutingContext context)
    {
        var controller = context.Controller as Controller;
        var dataFromDb = {db-query};
        controller.ViewBag.Example = dataFromDb;
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        // do something after the action executes
    }
}

...我包括在Startup.cs这样的:

services.AddMvc(options =>
{
    options.Filters.Add(typeof(ViewBagFilter));
});

但是当我导航到任何 Identity razor 页面时,ViewBag.Example都不存在。

我怎样才能使它也可用于剃须刀页面?

这不起作用:

services.AddRazorPages(options =>
{
    options.Filters.Add(typeof(ViewBagFilter));
});

标签: c#asp.net-core-mvcrazor-pagesasp.net-core-identityaction-filter

解决方案


Razor 页面中的过滤器与 MVC 不同。您将需要创建 Razor Pages 版本:https ://www.learnrazorpages.com/razor-pages/filters

请注意,动态ViewBag类型在 Razor Pages 类型中不可用PageModel


推荐阅读