son que net mvc los asp .net asp.net-mvc-3 razor html-helper

.net - que - html textbox asp net



La diferencia entre Html.Action y Html.RenderAction (3)

De Phil Haack :

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.

He estado tratando de descubrir la diferencia entre RenderAction y Action. No sé si estoy tan preocupado por las diferencias en este momento, en cuanto a por qué no puedo hacer que RenderAction funcione. Por lo que puedo decir, estoy pasando los parámetros correctos. La sobrecarga que uso parece ser la misma para ambos:

@Html.RenderAction(Action, Controller, Route) @Html.Action("Breadcrumb", "Navigation", new {SeoUrl = Model.CarlineBucket.SEOURLName}) @Html.RenderAction("Breadcrumb", "Navigation", new {SeoUrl = Model.CarlineBucket.SEOURLName})

Obtengo un error de compilación cuando intento usar RenderAction:

CS1502: la mejor coincidencia de método sobrecargado para ''System.Web.WebPages.WebPageExecutingBase.Write (System.Web.WebPages.HelperResult)'' tiene algunos argumentos no válidos.

¿Algún consejo o sugerencia? ¿No debería molestarme con RenderAction?


El tipo de retorno de Html.RenderAction es void que significa que representa directamente las respuestas en Ver, donde el tipo de retorno de Html.Action es MvcHtmlString , puede ver su vista de render en el controlador y modificarlo también utilizando el siguiente método

protected string RenderPartialViewToString(string viewName, object model) { if (string.IsNullOrEmpty(viewName)) viewName = ControllerContext.RouteData.GetRequiredString("action"); ViewData.Model = model; using (StringWriter sw = new StringWriter()) { ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); viewResult.View.Render(viewContext, sw); return sw.GetStringBuilder().ToString(); } }

Esto devolverá la cadena Html de la Vista.


Tratar:

@{Html.RenderAction("Breadcrumb", "Navigation", new {SeoUrl = Model.CarlineBucket.SEOURLName})}

@Html.RenderAction() genera una llamada de escritura para generar algo en la página y en su caso no lo está haciendo porque RenderAction representa el resultado directamente en la Respuesta. si usa @{Html.RenderAction()} debería funcionar.