2009-12-13 17 views
6

Me gusta usar el método de extensión RenderAction en el objeto HtmlHelper para representar barras laterales y elementos similares en páginas, ya que me permite conservar el código de acceso a datos para cada parte en métodos separados en el controlador. Utilizando una base de controlador abstracta, puedo definir una "estrategia de barra lateral" predeterminada, que luego se puede refinar anulando el método en un controlador concreto, cuando sea necesario.Me gusta Html.RenderAction() pero sin reinstalar el objeto del controlador

El único "problema" que tengo con este enfoque es que el RenderAction está construido de manera que siempre crea una instancia de noticias de la clase de controlador, incluso cuando las acciones del controlador ya están en acción. Algunos de mis controladores hacen una búsqueda de datos en su método Initialize, y utilizando el método RenderAction en la vista hace que esto ocurra varias veces en la misma solicitud.

¿Hay alguna alternativa a RenderAction que reutilizará el objeto controlador si el método de acción que se va a invocar está en la misma clase de controlador que la acción "principal"?

+0

Por qué es un problema para usted? ¿No haces una optimización prematura? – queen3

+0

@ queen3: Posiblemente, pero esa no es la pregunta :) –

Respuesta

1

Puede llamar a esto. [Nombre de la acción] en su controlador.

por ejemplo esto. El índice() en el método de acción aproximado del controlador doméstico provocaría que la vista de índice se represente sin pasar por la inicialización del controlador una vez más. Sin embargo, esto solo funcionará para una página completa.

Un renderPartial funcionaría para usted pero debería asegurarse de que los "elementos" (barras laterales, etc.) tengan todos los datos que necesitan en el modelo de vista principal.

e.g RenderPartial ("SideBars", ViewData.Model). Si su ViewModel contiene todo lo que necesita para los parciales, pueden agregarse a las vistas Compartidas y su controlador solo necesita configurar el ViewMoel inicial.

Bondad,

Dan

+0

Con 'RenderPartial()' la vista establece explícitamente qué vista parcial incluir en mi barra lateral, y el controlador tiene que proporcionar los datos para este avance parcial. Con 'RenderAction()' el controlador puede decidir qué está pasando en la barra lateral, y cualquier acceso de datos requerido para la barra lateral se puede posponer hasta que se tome esta decisión. Ambos métodos tienen casos de uso, pero para lo que estoy tratando de hacer, creo que 'RenderAction()' se ajusta mejor. –

Cuestiones relacionadas