Pregunta

Estoy tratando de aprender el nuevo marco ASP .NET MVC y me gustaría saber la mejor práctica para el uso de UserControls.

Yo entiendo que se puede hacer de un UserControl como parcial y pasar los datos a ellos desde un controlador. Lo ideal sería que yo creo que no tiene sentido tener un código detrás de archivo ya que esto crea una tentación de romper las reglas MVC.

Voy a dar un ejemplo en el que no entiendo cómo UserControls encajan en el patrón.

  

Tengo un control de usuario que muestra el   últimas etiquetas (al igual que en   Desbordamiento de pila). A diferencia de lo Stackoverflow   quieren mostrar este control de usuario en   todas mis páginas. Si tengo una   Controlador decir QuestionController   que está hecha para manejar las acciones de   algunos puntos de vista de interrogación, por ejemplo, y vista   detalle, ¿significa esto que tengo que ir a buscar   los datos de la QuestionController y   luego pasarlo al control de usuario?

     

Si creo otro controlador decir   SearchController entonces yo tendría que   replicar la misma funcionalidad a   Obtener las últimas etiquetas para pasar a una   parcial de nuevo. ¿No significa esto que   las 2 diferentes controladores están haciendo   cosas adicionales que no estaban   Originalmente la intención de hacer?

¿Fue útil?

Solución

Si aparece el control de usuario en cada página, a continuación, una forma 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 allí. Si el control de usuario es menos penetrante, pero todavía se utiliza con frecuencia en todo el sitio, se puede extender ActionFilterAttribute y tienen su filtro de generar los datos necesarios. Este atributo podría ser utilizado para decorar los controladores o acciones que generan puntos de vista que utilizan el control de usuario.

Estoy asumiendo en todo esto que los datos para el control de usuario es independiente de la acción se invoca. Si hay una dependencia, es probable que sea mejor para empujar la lógica en una clase (o clases, tal vez utilizando Strategy) y hacer que la generación de los datos explícitos en cada acción o el controlador (a través anulando OnActionExecuting).

Otros consejos

Por otra parte, con ASP.NET MVC 2 ahora se puede utilizar para llamar a un RenderAction completamente nueva acción del controlador que puede recuperar los datos. Esto hace que su código mucho más modular y es más claro que los datos está viniendo.

También puede considerar la posibilidad de clases del modelo en una jerarquía. La clase alta (o una de las clases altas) contendrán los datos necesarios para sus controles de usuario generalizados. A continuación, puede cargar estos datos utilizados comúnmente en una clase de controlador de base.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top