2011-01-11 29 views
7

Después de haber trabajado con .NET tanto en winforms como en ASP.net durante algunos años, ahora estoy empezando a entrar en MVC (un poco tarde lo sé). Una gran confusión para mí es el concepto de 'componentes' reutilizables, similar al concepto de un usuario de control en formularios web.ASP> net MVC parciales reutilizables

Por ejemplo, me gustaría tener una serie de 'widgets' dentro del área de miembros de mi sitio, uno de los cuales son los detalles del administrador de cuentas de los usuarios que iniciaron sesión. Sin embargo, puedo crear esto como parcial cuando la página carga los datos que se deben pasar como parte de ViewModel/View Data. Me gustaría usar este widget en varias secciones diferentes, lo que significaría que necesito poner el código para pasar los datos en una cantidad de controladores diferentes. Esto parece violar el principio SECO, o me estoy perdiendo algo aquí? Idealmente, me gustaría que todo se encapsule dentro del 1 parcial que luego se puede usar en cualquier página.

Respuesta

4

Usted puede ir de tres maneras:

1) Para los controles simples, sin mucha lógica, puede crear nueva instancia de la vista del modelo personalizado para el control: Html.RenderPartial ("YourControl", nueva YourControlViewModel() {Param1 = "value1", Param2 = Model.AnotherValue});

2) Si necesita un poco de lógica de fondo para el control, puede usar Html.RenderAction ("ActionName", "SomeControllerName", RouteValuesDictionary); Llamará a la acción del controlador estándar, utilizará la vista e insertará la salida resultante en la página. Puede agregar el atributo [ChildActionOnly] al método del controlador para asegurarse de que el método esté disponible solo desde Html.RenderPartial. Está violando levemente el principio de MVC (la vista no debe llamar al controlador), pero es ideal para widgets, y se usa en el mundo de Ruby on Rails sin demasiados problemas. Puede comprobar genial artículo de Haacked

3) Crear ayuda HTML personalizada para tareas como el formato de fecha personalizado, calculando etc ..

En su caso, elegiría el número dos.

+0

Eso tiene mucho sentido, supongo que en mi caso simple podría usar no. 1 y recuperar el usuario actualmente conectado desde el constructor de ViewModel, o no.2 si se requiere interacción de 2 vías. – Macros

+0

Si el modelo de vista tiene una identificación del usuario, puede pasarla en los valores de ruta, usar 2) y almacenar en caché los datos. Otra opción es cargar el usuario conectado actual de la sesión, podría ser muy simple, pero viola algunos principios. Marca la respuesta si te gusta, gracias. – jhexp

Cuestiones relacionadas