我知道如何注册应用所有操作的全局过滤器:
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()
{
...
}
答案 0 :(得分:2)
如果动作是用[ChildActionOnly]修饰的,你应该在[MySweetCustomFiAttribute]中加入一个旁路来返回。像这样:
if(filterContext.ActionDescriptor.IsDefined(typeof(ChildActionOnlyAttribute), false))
return;
答案 1 :(得分:0)
在@ 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;
}
}
}