2011-06-18 18 views
18

estoy usando el siguiente para obtener el controlador y la acción actual en MVC3 asp.net:controlador de acción actual y desde el interior de vista parcial

var currentAction = routeData.GetRequiredString("action"); 
var currentController = routeData.GetRequiredString("controller"); 

Esto funciona perfectamente. Sin embargo, si llamo esto desde dentro de una vista parcial que se llama desde mi diseño, se devuelve "Diseño" como el controlador actual. Por supuesto, esto es un comportamiento correcto, pero ¿hay alguna forma de acceder al nombre del controlador principal?

Editar para más aclaraciones:

estoy llamando a mi controlador de menú y vista parcial desde dentro _Layout.cshtml:

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

A continuación, dentro de esa visión parcial de menús, estoy llamando código que devuelve la acción actual y el controlador.

+0

Su pregunta no es muy clara. ¿Podrías mostrar cómo llamas a esto parcial? –

+0

@ darin-dimitrov He actualizado mi publicación con más información. ¿Esto ayuda en absoluto? – Jonathan

+0

sí te ayuda, incluso recibes una respuesta :-) –

Respuesta

43

Después de su pregunta actualizada y mostrando su código, es mucho más claro: no está incluyendo una vista parcial. Estás llamando acción infantil. Hay una gran diferencia entre Html.Partial y Html.Action. Así que si usted desea conseguir el contexto de los padres dentro de esta acción niño que podría hacer esto:

public ActionResult Menu() 
{ 
    var rd = ControllerContext.ParentActionViewContext.RouteData; 
    var currentAction = rd.GetRequiredString("action"); 
    var currentController = rd.GetRequiredString("controller"); 
    ... 
    return View(); 
} 
+2

Spot on. Gracias Darin: cambiar de Forms a MVC es un salto bastante grande, pero personas como tú están haciendo la transición un poco más fácil. – Jonathan

37

me encontré en esta página en busca de una forma de acceder al nombre de los controladores de los padres después de una llamada usando parcial

@Html.Partial("Paging") 

Esto se puede hacer en la vista parcial

@{ 
    var controller = ViewContext.RouteData.GetRequiredString("controller"); 
    var action = ViewContext.RouteData.GetRequiredString("action"); 
} 
+2

¡Hiciste mi día! :) –

Cuestiones relacionadas