В ASP.NET MVC 3, что filterContext.IsChildAction?

Судя по звуку, это буквально логическое значение того, является ли действие дочерним действием.

Я вижу этот бит кода довольно часто:

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

Похоже, что он существует для того, чтобы «задушить» ненужное выполнение кода ... но что на самом деле означает filterContext.IsChildAction?

22
задан Chaddeus 9 November 2011 в 06:00
поделиться

1 ответ

При просмотре страниц вам часто может потребоваться ввести выходные данные другого действия в текущую страницу - например, ввести меню. Генерация меню может включать множество бизнес-логики (определение прав или пользователей, выбор выбранного элемента и т. Д.), Поэтому это делается не в частичном представлении, а в контроллере.

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

Этот тип действия называется ChildAction, так как он не может (и не должен) вызываться из внешнего мира (путем посещения URL). Это может быть вызвано только самим приложением, обычно изнутри страницы просмотра.

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

И если вы хотите (или не хотите) делать какие-то конкретные вещи, когда выполняемое действие является дочерним действием, вы проверяете свойство filterContext.IsChildAction.

35
ответ дан 29 November 2019 в 05:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: