2011-11-09 67 views
21

从它的声音中,它实际上是一个布尔值,它是否是一个子动作。在ASP.NET MVC 3中,filterContext.IsChildAction是什么?

我看到这段代码往往:

protected override void OnActionExecuting(ActionExecutingContext filterContext) { 
    if (filterContext.IsChildAction) return; 
    ... 
} 

这似乎是在那里“油门”不必要的代码执行......但到底是什么filterContext.IsChildAction实际上意味着什么呢?

+2

IsChildAction会告诉您当前正在执行的操作是否是另一个操作的子操作(例如,当您从视图中调用该操作时)。但你已经知道了,那么问题是什么? – Ragesh

回答

34

在查看页面中,您可能经常需要将其他操作的输出注入当前页面 - 例如注入菜单。菜单生成可能涉及许多业务逻辑(确定权限或用户,选择所选项目等),因此它不在局部视图中完成,而是在控制器中完成。

public class MenuController : Controller 
{ 
    [ChildActionOnly] 
    public ActionResult Menu() 
    { 
     MenuViewModel model = GenerateMenu(); 
     return View(model); 
    } 
} 

这种类型的行动被称为ChildAction,因为它不能(不应该)被称为来自外界的(通过访问URL)。这只能由应用程序本身调用,通常从视图页面中调用。

@Html.Action("Menu", "Menu") 

,如果你想(或不愿)做一些具体的东西时,正在执行的行动是一个孩子的动作,你检查filterContext.IsChildAction财产。

+3

优秀的文章,谢谢。我不知道ChildActionOnly属性存在。嗯......我必须利用这一点,谢谢! – Chaddeus

+1

@Chad欢迎:) – archil

+0

@archil是的,很好的解释+1。 – user981375

相关问题