vista una tutorial renderbody página para net método mvc multiples modelos modelo llamado form diseño controlador asp asp.net asp.net-mvc-2 partial-views

asp.net - una - no se ha llamado al método "renderbody" para la página de diseño



Vista parcial de ASP.NET MVC 3 en la página de diseño (4)

Estoy trabajando en la configuración de un contenido compartido (navegación) para una página de diseño de asp.net MVC.

Aquí está mi vista parcial "_LayoutPartial.cshtml" con código para extraer datos de navegación de un modelo.

@model MyApp.Models.ViewModel.LayoutViewModel <p> @foreach (var item in Model.navHeader) { //Test dump of navigation data @Html.Encode(item.Name); @Html.Encode(item.URL); } </p>

Así es como se ve el código de mi controlador "LayoutController.cs".

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MyApp.Models.ViewModel; namespace MyApp.Controllers { public class LayoutController : Controller { // // GET: /Layout/ LayoutViewModel layout = new LayoutViewModel(); public ActionResult Index() { return View(layout); } } }

Aquí está el código para la página "_Layout.cshtml". Estoy intentando llamar a la vista parcial aquí usando el método Html.RenderAction (Acción, Controlador).

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> </head> <body> <p> @{Html.RenderAction("Index","Layout");} </p> @RenderBody() </body> </html>

Cuando la página de diseño ejecuta la línea @ {Html.RenderAction ("Index", "Layout");}, arroja un mensaje de error "Error al ejecutar la solicitud secundaria para el controlador ''System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper''."

¿Qué me estoy perdiendo amigos? ¿Cómo puedo llamar una vista parcial en una página de diseño?

¡Gracias a todos de antemano!


En lugar de:

public ActionResult Index() { return View(layout); }

hacer:

public ActionResult Index() { return PartialView(layout); }

Si no lo hace cuando devuelve una vista normal desde la acción de su hijo, esta vista normal intenta incluir el Diseño, que a su vez intenta renderizar la acción secundaria, que a su vez devuelve una vista, que a su vez incluye el Diseño , que a su vez intenta hacer que el niño actúe, ... y terminamos con nombres como el portado por este mismo sitio.

También en su parcial no es necesario hacer doble codificación. La función @ Razor ya codifica HTML:

@model MyApp.Models.ViewModel.LayoutViewModel <p> @foreach (var item in Model.navHeader) { @item.Name @item.URL } </p>


Primero verifique que su vista hija esté dentro del directorio Shared

@Html.Partial("_LayoutPartial")

O

@{Html.RenderAction("actionname", "controller name");}

Y no use @Html.Encode() , Razor ya lo está haciendo por usted. Solo usa

@item.Name @item.URL


He resuelto este error en la página Diseño

System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper

¡Importante! Primero crea una vista parcial dentro de la carpeta compartida

En el controlador,

public PartialViewResult Userdetails() { .... return PartialView("PartialViewName", obj); }

En la página de diseño,

@{Html.RenderAction("action","controller");}


Sé que esta es una vieja pregunta, pero pensé que podría arrojar esto aquí. Puede usar Html.Action o Html.RenderAction . Ambos hacen técnicamente lo mismo, pero dependiendo de la cantidad de contenido que regreses puede tener un impacto sobre cuál deberías usar realmente para obtener la mejor eficiencia.

Ambos métodos le permiten llamar a un método de acción desde una vista y generar los resultados de la acción en su lugar dentro de la vista. La diferencia entre los dos es que Html.RenderAction representará el resultado directamente en la Respuesta (que es más eficiente si la acción arroja una gran cantidad de HTML) mientras que Html.Action devuelve una cadena con el resultado.

Fuente