在ASP.. NET MVC 3,什么是filtercontext.ischildaction

本文关键字:什么 filtercontext ischildaction ASP NET MVC | 更新日期: 2023-09-27 18:13:59

从字面上看,它是一个布尔值,表示该操作是否为子操作。

我经常看到这段代码:

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

它似乎在那里"节流"不必要的代码执行…但是filterContext。childaction到底是什么意思?

在ASP.. NET MVC 3,什么是filtercontext.ischildaction

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

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

这种类型的操作被称为ChildAction,因为它不能(也不应该)从外部调用(通过访问url)。这只能由应用程序本身调用,通常从视图页中调用。

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

如果你希望(或不希望)做一些特定的东西,当正在执行的动作是一个子动作,你检查filterContext.IsChildAction属性。

也许现在指出来太晚了,但公认的答案有点误导人,从某种意义上说:标记为ChildActionOnlyAttribute的操作绝对不能作为独立操作运行,因此使用IsChildAction进行测试是毫无意义的。

另一方面,如果你的操作以两种方式被调用

  1. 作为常规动作

  2. 作为另一个动作中的子动作

检查IsChildAction可能是有用的,以便您可以根据该值执行额外的逻辑。