c# - 如何使 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));
});
解决方案
Razor 页面中的过滤器与 MVC 不同。您将需要创建 Razor Pages 版本:https ://www.learnrazorpages.com/razor-pages/filters
请注意,动态ViewBag
类型在 Razor Pages 类型中不可用PageModel
。