2011-11-09 17 views
21

Por lo que parece, literalmente es un valor booleano de si la acción es o no una acción secundaria.En ASP.NET MVC 3, ¿qué es filterContext.IsChildAction?

veo este pedazo de código con bastante frecuencia:

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

Parece ser que hay que "acelerador" innecesaria la ejecución de código ... pero ¿qué significa realmente filterContext.IsChildAction?

+2

IsChildAction le informa si la acción que se está ejecutando actualmente es hija de otra acción (como cuando la llama desde una vista). Pero ya lo sabes, ¿cuál es la pregunta? – Ragesh

Respuesta

34

En las páginas de vista, a menudo puede necesitar inyectar el resultado de otra acción en la página actual, por ejemplo, inyectando menús. La generación de menús puede implicar una gran cantidad de lógica de negocios (determinar los derechos o usuarios, elegir el elemento seleccionado, etc.), por lo que no se realiza en la vista parcial, sino en el controlador.

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

Este tipo de acción se llama ChildAction, ya que no puede (y se supone que no) ser llamado desde mundo exterior (visitando url). Esto solo puede ser llamado por la propia aplicación, generalmente desde dentro de la página de visualización.

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

Y si lo desea (o no desea) para hacer algunas cosas específicas cuando la acción que se está ejecutando es una acción infantil, inspeccionar filterContext.IsChildAction propiedad.

+3

Redacción excelente, gracias. No tenía idea de que existía el atributo ChildActionOnly. Hmmm ... Tendré que aprovechar eso, ¡gracias! – Chaddeus

+1

@Chad eres bienvenido :) – archil

+0

@archil Sí, buena explicación +1. – user981375