如何使IActionFilter可用于剃须刀页面?

时间:2020-07-17 05:47:10

标签: c# asp.net-core-mvc razor-pages asp.net-core-identity action-filter

我有这个过滤器:

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剃刀页面时,ViewBag.Example不存在。

我如何也可以将其用于剃须刀页面?

这不起作用:

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

1 个答案:

答案 0 :(得分:1)

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

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