天天看点

【MVC】什么是 ChildAction

在视图页中,你或许经常需要注入一些有其他action的输出, 例如,插入菜单。 大多情况,对于菜单的生成,可能牵涉到很多逻辑(取决于权限 、用户等),所以生成过程不是放在局部视图(Patial view)中,而是放在controller中:

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

这种类型的action 就叫做 ChildAction, 因为它不能也不应该被外部通过访问url所调用, 只能被内部程序所调用,一般来说都是在另一个视图中被调用。

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

如果当一个action被当作ChildAction调用时,你想针对这种调用做一些特殊的处理的话, 可以检查 ActionExecutingContext.IsChildAction/ViewContext.IsChildAction 属性。