2011-12-13 20 views
10

Tengo un sitio con una barra de navegación definida en el diseño. La barra de navegación se usa en varias vistas del sitio y tiene contenido dinámico que se genera a partir de un par de consultas en la Base de datos.ASP.NET MVC: ¿Usar Html.Partial o Html.Action?

Me pregunto cuál es la mejor práctica para representar este menú (definido en una vista parcial).

Por lo que yo sé que puedo hacerlo de dos maneras, con algunas ventajas y desventajas de cada uno:

Usando Html.Action: + Es completamente independiente de la opinión de que está utilizando el diseño - Se agrega una solicitud adicional para representar una sección de la página - Estoy agregando un método de acción que devuelve una vista parcial que no se llama desde Ajax.

Usando Html.Partial: + Un simple solicitud para hacer que todo el punto de vista - Cada modelo de vista debe contener la información necesaria para la barra de navegación

Realmente agradecería sus puntos de vista sobre esto, ya que tengo varios escenarios como este en mi sitio y no estoy seguro de cuál es el mejor.

Gracias!

Respuesta

14

Usaría Html.Action especialmente si este menú contiene algunos datos dinámicos que se obtienen de la base de datos. La ventaja es que puede disociar completamente esta recuperación en una acción completamente separada de la principal. Además, el resultado de las acciones secundarias se puede almacenar en la memoria caché decorando con el atributo [OutputCache]. Al hacer esto, podría reducir la carga en su base de datos si los datos no cambian con bastante frecuencia.

Se añade una solicitud adicional para hacer que una sección de la página

Usted debe haber entendido mal algo al respecto. No hay una solicitud adicional del cliente. Todo se sirve en una sola solicitud. Hay una instanciación de controlador adicional y ejecución de acción, pero no una nueva solicitud HTTP del cliente. Es como si se ejecutaran 2 acciones de controlador en la misma solicitud y su resultado se agregara en una sola página HTML enviada al cliente.

+0

Si bien es cierto que solo ejecuta una solicitud HTTP, también es cierto que la sobrecarga de la representación de una acción supera con creces la de la representación parcial. –

+4

@NathanTaylor, es verdad. Hay una sobrecarga que excede la de representar un parcial. Pero esta sobrecarga es taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Me refiero a que obtienes separación de preocupaciones, obtienes código limpio, obtienes almacenamiento en caché que se exime en rendimiento de renderizar un parcial, así que sí, usa Html.Action. –

+0

Ciertamente no estoy en desacuerdo, solo estoy resaltando los hechos. Html.Action FTW. –

Cuestiones relacionadas