Asp.Net注册表全局自定义筛选器没有[ChildAactionOnly]属性

Asp.Net注册表全局自定义筛选器没有[ChildAactionOnly]属性,asp.net,asp.net-mvc,action-filter,Asp.net,Asp.net Mvc,Action Filter,我知道如何注册全局筛选器,该筛选器将所有操作应用于: protected void Application_Start(){ GlobalFilters.Filters.Add(new MySweetCustomFiAttribute()); } 但是,我需要注册mysweetcustomfilteratAttribute到没有(或有)[ChildActionOnly]属性的操作 // Register MySweetCustomFilterAttribute publ

我知道如何注册全局筛选器,该筛选器将所有操作应用于:

protected void Application_Start(){
    GlobalFilters.Filters.Add(new MySweetCustomFiAttribute());
}
但是,我需要注册
mysweetcustomfilteratAttribute
到没有(或有)
[ChildActionOnly]
属性的操作

    // Register MySweetCustomFilterAttribute
    public ActionResult Index()
    {
       return View();
    }

   // Do not register MySweetCustomFilterAttribute
   [ChildActionOnly]
   public ActionResult MySweetChildAction()
    {
      ...
    }

如果操作用[ChildActionOnly]修饰,则应在[MySweetCustomFiAttribute]中设置一个旁路以返回。像这样:

if(filterContext.ActionDescriptor.IsDefined(typeof(ChildActionOnlyAttribute),false))
返回;

在@pedro benevides的帮助下,这里是完整的解决方案

namespace tv2web.Filters{
    public class MainModelFixAttribute : ActionFilterAttribute {
        protected bool IsChild(ControllerContext filterContext) {
            return filterContext.IsChildAction;
        }

    public override void OnResultExecuting(ResultExecutingContext filterContext)  {
        if (IsChild(filterContext)) return;

        filterContext.Controller.ViewBag.mainModel = filterContext.Controller.ViewData.Model;
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext) {
        if (IsChild(filterContext)) return;
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext) {
        if (IsChild(filterContext)) return;
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext) {
        if (IsChild(filterContext)) return;
    }


}

}

谢谢你的方法。我从中得到了灵感,并像你一样实施了一项工作<代码>操作描述符不适用于ResultExecut(ed | ing)`方法
var isChild=filterContext.IsChildAction更为严格。