2015-11-05 51 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; 
    } 


} 

}