2015-11-05 72 views
0

我知道如何注册与应用所有行动全球过滤器:Asp.Net注册全球定制过滤器没有[ChildAactionOnly]属性

protected void Application_Start(){ 
    GlobalFilters.Filters.Add(new MySweetCustomFiAttribute()); 
} 

而是我需要注册MySweetCustomFilterAttribute不具有动作(或具有)[ChildActionOnly]属性。

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

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

回答

1

你应该把旁路到您的[MySweetCustomFiAttribute]如果动作装饰有[ChildActionOnly]返回。就像这样:

if(filterContext.ActionDescriptor.IsDefined(typeof(ChildActionOnlyAttribute), false)) 
    return; 
+0

感谢您的帮助方法变通。我受到它的启发,并且像你一样执行了一项工作。 ActionDescriptor不能用于OnResultExecut(ed | ing)方法。 'var isChild = filterContext.IsChildAction;'更直接。 – guneysus

0

这里完成@佩德罗 - 贝内维德斯

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; 
    } 


} 

}