RenderAction RenderPartial

Por lo que he entendido, existe una gran diferencia entre el Html.RenderPartial incluido en el lanzamiento ASP.NET MVC y el HTML.RenderAction en el Microsoft.Web.Mvc.ViewExtensions incluido en MVC Futures.

En mi aplicación tengo muchas páginas compuestas de muchos “widgets” (más o menos) que tienen cada uno su propia función específica.

Me pareció más razonable usar el método RenderAction ya que cada widget tendría un controlador dedicado para obtener diferentes datos y renderizar una vista dedicada (en lugar de tener solo un controlador y un modelo de vista único para pasar al ayudante RenderPartial para generar vistas )

De las pruebas que he hecho tengo un formulario que apunta a un método de acción Crear en un controlador como:

   

y llamándolo con

   

rendirá correctamente a:

 

pero con el mismo equivalente con RenderAction (por lo que usar un método de acción MessageForm en el controlador para representar la vista) no se corregirá correctamente así:

  <% Html.RenderAction(m => m.MessageForm()); %> 

rendirá en:

  

Tenga en cuenta que la acción está vacía.

¿Es esta la forma correcta de usar el ayudante RenderAction y es correcto usarlo en casos como ese?

ACTUALIZACIÓN: En realidad, cambiar el nombre de la vista parcial a _MessageForm representa el formulario de forma correcta.

Muy viejo, pero saltó a mi lista de preguntas sin respuesta 🙂

Hay una gran diferencia entre RenderAction y RenderPartial . RenderPartial renderizará una View en el mismo controlador (o compartido), mientras que RenderAction realmente realizará un ciclo completo de MVC, es decir: creará una instancia del controlador (cualquier controlador que mencione, no solo el actual), lo hará ejecuta la acción, y luego regresará y renderizará el resultado.

RenderPartial es más similar a una inclusion , incluso compartirá el mismo modelo si no especifica uno diferente.

RenderAction es mucho más complejo (y puede haber efectos secundarios no deseados, es por eso que no hicieron que esta función esté disponible desde la versión 1, inicialmente estaba disponible como una función experimental).

Entonces, en su caso, si tiene widgets, está bien usar ambos. Depende de la complejidad del widget. Si tiene uno que tiene que obtener datos de un DB, hacer algo complejo, etc … entonces probablemente debería usar RenderAction .

Tengo un controlador de noticias responsable de objetos de noticias. Creé una acción de locking, que representará un bloque con las últimas noticias para poner en la página de inicio. Este es un ejemplo perfecto, en mi opinión, para RenderAction.

Trabajar con MVC requiere mucha atención para no dispararse en el pie. Lo digo por la eficiencia de los productos MVC. En proyectos complejos, preferiría usar RenderPartial en lugar de RenderAction. Uso RenderPartial en el que utilizo la solicitud jQuery.ajax (con Html.Action). Definitivamente funciona de manera más eficiente que RenderAction. De esta forma, puede poner sus Vistas en el caché y luego llamar a jQuery.ajax. Pruébenlo ustedes mismos. Ayende lo explica claramente en Hibernating Rhinos .