2011-06-13 29 views
6

Tenemos una aplicación ASP.NET MVC 2 existente y completamente funcional. Estoy creando una aplicación MVC 3 que se supone que tiene el mismo aspecto que la existente. Es decir, debería usar la misma navegación ascx, encabezado y pie de página ascx, etc. Las ascx de la aplicación existente se pueblan a sí mismas en función de lo que hay en el modelo, por lo que no es solo "lo que quiero traer", son los modelos y la lógica del controlador que pertenece a esos controles también.Compartir vistas, lógica, etc. entre aplicaciones MVC

¿Hay alguna buena manera de hacerlo sin tener que refaccionar la aplicación original? He oído hablar de Portable Areas (http://lostechies.com/erichexter/2009/11/01/asp-net-mvc-portable-areas-via-mvccontrib/), pero parece que eso requeriría un importante refactor en la aplicación existente. También busqué en la extensión Razor Single File Generator, que nos permitiría compilar vistas en dlls y compartirlas, pero eso requeriría convertir la aplicación existente a MVC 3, y luego las vistas a Razor. (Y todavía no estoy seguro de que sería necesariamente "fácil" después de eso.)

¿Estoy pasando por alto algo obvio aquí? Simplemente parece que debería haber una buena forma de hacerlo, pero tal vez la aplicación existente solo necesita una gran revisión. : P

¡Gracias de antemano!

+4

posible duplicado de [Controladores de Participación y vistas con varias aplicaciones web] (http://stackoverflow.com/questions/4800819/sharing-controllers-and-views-with-multiple-web-applications) , la única diferencia que veo es en lugar de Razor, simplemente heredar del motor View View habitual. –

+0

Gracias, parece que tienes razón. – dizzwave

Respuesta

1

La solución más fácil es, probablemente, actualizar a MVC3 (algo trivial si no se está integrando con algo que no puede usar .NET 4) y convertir vistas a Razor cuando mueve vistas a una biblioteca compartida. El motor de vista Razor internamente tiene una serie de diferencias con el motor de vista de formularios web que hacen que sea más fácil adaptarse para usar en bibliotecas compartidas.

En mis propios proyectos, tengo el motor de vista precompilado que maneja todas las vistas, pero es bastante fácil configurar varios motores de vistas para que se use el primero para encontrar una vista válida. Para los diseños, deberá mantener una versión para ambos motores de visualización, pero eso no supone un esfuerzo adicional si tiene problemas para convertir todas las vistas en Razor a la vez.

La lógica del controlador compartido es bastante fácil. Defina el controlador en su biblioteca compartida y subclasselo en la carpeta de controladores donde el sistema buscará controladores.

+0

Genial, gracias. ¿Es esto lo mismo que la extensión RazorSingleFileGenerator? De lo contrario, ¿podría proporcionar un enlace que describa más completamente cómo hacer lo que está hablando? – dizzwave

+0

Uso una herramienta de línea de comandos en lugar de un solo generador de archivos y un motor de visualización más personalizado, pero sí, básicamente es lo mismo. –

Cuestiones relacionadas