2009-04-01 21 views
5

Estoy tratando de aprender la nueva estructura ASP .NET MVC y me gustaría saber la mejor práctica para usar UserControls.ASP .NET MVC correcta UserControl arquitectura

Entiendo que puede renderizar el UserControl como parcial y pasar datos desde un controlador. Idealmente, creo que tiene sentido no tener un código detrás del archivo ya que esto crea la tentación de romper las reglas de MVC.

Daré un ejemplo en el que no entiendo cómo los UserControls se ajustan al patrón.

tengo un control de usuario que muestra las últimas etiquetas (al igual que en stackoverflow). A diferencia de StackOverflow I , quiero mostrar este UserControl en en todas mis páginas. Si tengo un controlador , diga QuestionController que está destinado a manejar acciones desde algunas vistas de preguntas, p. Ej. ver y detalle, ¿significa esto que tengo que buscar los datos en el QuestionController y y luego pasarlo al UserControl?

Si creo otro controlador decir SearchController entonces yo tendría que replicar la misma funcionalidad a Obtener las últimas etiquetas para pasar a un nuevo parcial. ¿Esto no significa que los 2 controladores diferentes están haciendo cosas adicionales que no estaban originalmente destinados a hacer?

Respuesta

4

Si aparece el control de usuario en cada página, a continuación, una manera de abordar este sería el uso de un controlador de base de la cual derivan todos los controladores y generar el ViewData para el control de usuario reemplazando el método OnActionExecuting y poniendo la lógica ahí. Si su UserControl es menos penetrante, pero aún se utiliza con frecuencia en todo el sitio, puede extender ActionFilterAttribute y hacer que su filtro genere los datos necesarios. Este atributo se podría usar para decorar los controladores o acciones que generan vistas que usan UserControl.

Supongo en todo esto que los datos para el UserControl son independientes de la acción que se invoca. Si hay una dependencia, probablemente sea mejor insertar la lógica en una clase (o clases, tal vez utilizando la Estrategia) y hacer que la generación de los datos sea explícita en cada acción o controlador (mediante la anulación de OnActionExecuting).

-1

También puede considerar poner sus clases de modelo en una jerarquía. La clase superior (o una de las clases superiores) contendrá los datos necesarios para los controles de usuario generalizados. Luego puede cargar estos datos de uso común en una clase de controlador base.

4

De forma alternativa, con ASP.NET MVC 2 ahora puede usar RenderAction para llamar a una acción de controlador completamente nueva que puede recuperar los datos. Esto hace que su código sea mucho más modular y es más claro de dónde provienen los datos.

+0

¡oooo que suena justo lo que necesito! – Alex

Cuestiones relacionadas