创建自定义ActionFilterAttribute

本文关键字:ActionFilterAttribute 自定义 创建 | 更新日期: 2023-09-27 18:14:52

我创建了一个名为LayoutAttribute的ActionFilterAttribute,并将其添加到ActionResult:

控制器:

    [Layout(PageType.Department,"dnr")]
    public ActionResult Kd(string mainBody, int dnr)
    {

LayoutAttribute:

using System.Web.Mvc;
using Komplett.Infrastructure.NInject;
using Ninject;

namespace Minion.Services.PageState
{
  public class LayoutAttribute : ActionFilterAttribute
  {
    private readonly PageType _pageType;
    private readonly string _pageIdName;
    public LayoutAttribute(PageType PageType,string PageIdName = "")
    {
        _pageType = PageType;
        _pageIdName = PageIdName;
    }
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var pageStateModel = KernelContainer.Kernel.Get<PageStateModel>();
        if (filterContext.ActionParameters.ContainsKey(_pageIdName ?? ""))
        {
            pageStateModel.PageId = (string)filterContext.ActionParameters[_pageIdName];
        }
        pageStateModel.PageType = _pageType;
    }
}

}

问题是onactionexecution永远不会被调用。我还尝试在global.asax.cs中注册属性,但随后我需要一个无参数构造函数。我创建了这个并将其添加到global.asax.cs中,如下所示:

GlobalFilters.Filters.Add(new LayoutAttribute());

这个,没有任何运气。

我做错了什么?我如何使MVC调用onactionexecution ?

创建自定义ActionFilterAttribute

确保你实现了

System.Web.Mvc.ActionFilterAttribute

System.Web.Http.Filters.ActionFilterAttribute

它们都有onactionexecution和onactionexecute方法,所以这可能有点欺骗性

相关文章:
  • 没有找到相关文章