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代码>更为严格。