2010-12-10 19 views
51

Tengo una parte de mi vista que se representa mediante RenderAction llamando a una acción secundaria. ¿Cómo puedo obtener el controlador principal y la acción desde dentro de esta acción secundaria?¿Cómo obtener el controlador y la acción actuales desde dentro de la acción del niño?

Cuando uso ..

@ViewContext.RouteData.Values["action"] 

le regreso el nombre de la acción del niño, pero lo que necesito es el padre/la acción de llamada.

Gracias

Por cierto estoy usando MVC 3 con la maquinilla de afeitar.

Respuesta

70

Y si quiere acceder a ella desde dentro de la acción del niño en sí (en lugar de la vista) que puede utilizar

ControllerContext.ParentActionViewContext.RouteData.Values["action"] 
0

Utilice el enlace de modelo para obtener el nombre de la acción, el nombre del controlador o cualquier otro valor de url:

routes.MapRoute("City", "{citySlug}", new { controller = "home", action = "city" }); 

[ChildActionOnly] 
public PartialViewResult Navigation(string citySlug) 
{ 
    var model = new NavigationModel() 
    { 
     IsAuthenticated = _userService.IsAuthenticated(), 
     Cities = _cityService.GetCities(), 
     GigsWeBrought = _gigService.GetGigsWeBrought(citySlug), 
     GigsWeWant = _gigService.GetGigsWeWant(citySlug) 
    }; 

    return PartialView(model); 
}  
15

Si el parcial está dentro de otro parcial, esto no funcionará a menos que encontremos el contenido superior de la vista principal. Lo puede encontrar con esto:

var parentActionViewContext = ViewContext.ParentActionViewContext; 
while (parentActionViewContext.ParentActionViewContext != null) 
{ 
    parentActionViewContext = parentActionViewContext.ParentActionViewContext; 
} 
+0

Me ayudó mucho, ¡salud! –

1

que tenían el mismo problema y se le ocurrió misma solución que Carlos Martínez, excepto que lo convirtió en una extensión:

public static class ViewContextExtension 
{ 
    public static ViewContext TopmostParent(this ViewContext context) 
    { 
     ViewContext result = context; 
     while (result.ParentActionViewContext != null) 
     { 
      result = result.ParentActionViewContext; 
     } 
     return result; 
    } 
} 

espero que esto ayude a otros que tienen el mismo problema

Cuestiones relacionadas