asp.net-mvc-3 - what - viewdatadictionary partial view
¿La acción de un niño comparte el mismo ViewBag con su acción de "padres"? (2)
Estoy confundido con esto: Tengo una acción, por ejemplo, Padre, y en el archivo de vista correspondiente, he llamado a una acción hija, digamos Niño, ambas acciones Padre e Hijo están en el mismo controlador.
y necesito la acción Child y la acción Parent para compartir algunos datos en ViewBag. Ahora, ¿qué debo hacer? Aquí está mi pregunta:
cuando llamo a la acción Child en el archivo view de los padres, le paso la viewbag de la siguiente manera: @ Html.Action (ViewBag). en mi acción de niño, hago esto:
public PartialViewResult Child(Object ViewBag)
{
//using the data in ViewBag
}
Es este el camino correcto ? ¿Pasa el objeto viewbag por referencia o es un objeto diferente al viewbag original (se necesita más memoria)?
¿O si la acción de Child está compartiendo viewbag con su Acción primaria de llamada por defecto?
De la respuesta de Darin Dimitrov, sabía que no puedo hacer algo como esto: @ Html.Action (ViewBag)
Pero realmente necesito pasar los muti-parámetros de acción infantil, ¿qué puedo hacer?
Hay una manera, pero tienes que crear una clase abstracta personalizada como la clase base para tus vistas de maquinillas de afeitar. Luego exponga todo lo que necesite de las acciones de padres a hijos. Así es como obtengo el ViewBag del controlador raíz dentro de una clase que hereda de WebViewPage
private dynamic GetPageViewBag()
{
if (Html == null || Html.ViewContext == null) //this means that the page is root or parial view
{
return ViewBag;
}
ControllerBase controller = Html.ViewContext.Controller;
while (controller.ControllerContext.IsChildAction) //traverse hierachy to get root controller
{
controller = controller.ControllerContext.ParentActionViewContext.Controller;
}
return controller.ViewBag;
}
Las acciones de los niños siguen un ciclo de vida diferente del controlador / modelo / vista que las acciones de los padres. Como resultado, no comparten ViewData / ViewBag. Si desea pasar parámetros a una acción secundaria del padre, puede hacer esto:
@Html.Action("Child", new { message = ViewBag.Message })
y en la acción del niño:
public ActionResult Child(string message)
{
...
}