tag net mvc for asp asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

asp.net - for - partial views asp net mvc



¿Es posible acceder a MVC Views ubicadas en otro proyecto? (3)

MVC no compila vistas en DLL, sino que hace referencia a ellas como archivos desde la raíz de su directorio de sitios. La ubicación, por convención, es ~ / Vistas y se sigue una ruta de búsqueda. Esto está más o menos codificado en los motores de vista predeterminados.

Debido a que las vistas son archivos, cuando los divide en un proyecto separado, no existirán en su proyecto de aplicación web principal. Por lo tanto, el motor de visualización no puede encontrarlos. Cuando compila la aplicación, cualquier proyecto al que se haga referencia solo copiará las DLL (y potencialmente algunas otras cosas, como pdb, etc.)

Ahora, hay maneras de evitar esto, pero para ser honesto, generalmente son más problemáticos de lo que valen. Puede ver "Áreas portátiles" en el proyecto mvc contrib, pero estas no están bien soportadas y se ha hablado de reemplazarlas con el empaque de NuGet.

También puede seguir los consejos de @ mo.esmp y crear un motor de vista personalizado, pero aún tendrá que encontrar formas de copiar las Vistas en algún lugar donde el sitio pueda acceder a ellas al compilarlas y / o desplegarlas.

Mi sugerencia sería NO romper los proyectos de la manera que usted describe. No veo ningún valor en ello. Si su proyecto se vuelve tan grande, en lugar de eso, separaría su código en áreas y mantendré todos sus códigos de área y datos juntos.

¿Qué valor tiene separar los elementos que dependen claramente uno del otro en conjuntos separados cuyo único propósito es recopilar cosas en función de su propósito? Veo algo de valor al separar los modelos en su propio proyecto, ya que los modelos pueden ser utilizados por más de un ensamblaje. Sin embargo, los controladores y las vistas solo son utilizados por el sitio principal de MVC.

Quiero separar mi proyecto MVC en varios proyectos

Así que antes que nada, he creado dos proyectos Front y Views.

El proyecto Front es una aplicación web que contiene controladores y modelos.

El proyecto Vistas es un proyecto de biblioteca de clases que solo contiene las vistas

Mi pregunta es cómo puedo hacer que los controladores llamen a las vistas ubicadas en el proyecto Vistas.

Tengo controladores como este:

public ActionResult Default() { return this.View(); }


Para incluir los controladores, debe cambiar los registros de ruta para indicarles dónde buscar los controladores:

routes.MapRoute(name: "Default", url: "{controller}/{action}/{id}", namespaces: new[] {"[Namespace of the Project that contains your controllers]"}, defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional});

para incluir Vista crea un ViewEngine personalizado:

public class CustomViewEngine: RazorViewEngine { public CustomViewEngine() { MasterLocationFormats = new string[] { "~/bin/Views/{1}/{0}.cshtml", "~/bin/Views/{1}/{0}.vbhtml", "~/bin/Views/Shared/{0}.cshtml", "~/bin/Views/Shared/{0}.vbhtml" }; ViewLocationFormats = new string[] { "~/bin/Areas/{2}/Views/{1}/{0}.cshtml", "~/bin/Areas/{2}/Views/{1}/{0}.vbhtml", "~/bin/Areas/{2}/Views/Shared/{0}.cshtml", "~/bin/Areas/{2}/Views/Shared/{0}.vbhtml" }; . . . } } protected void Application_Start() { ViewEngines.Engines.Add(new CustomViewEngine());

Para obtener más información, consulte la implementación predeterminada de RazorViewEngin.

Aquí algunos buenos artículos:

Almacenamiento de controladores y vistas de ASP.NET MVC en ensamblajes separados

ASP.NET MVC: Poner sus controladores en un ensamblaje separado

Cómo llamar a los controladores en ensamblajes externos en una aplicación MVC de ASP.NET


Puede precompilar sus vistas, de esa forma se incluyen en la dll y puede hacer referencia a ellas desde otro proyecto.

Cómo hacerlo:

  1. Mueve las vistas a otro proyecto.
  2. Instalar la extensión Razor Generator en Visual Studio
  3. Cambie la herramienta personalizada a RazorGenerator para esas vistas
  4. Agregue el paquete RazorGenerator.Mvc NuGet al proyecto de visualización
  5. Proyecto de vista de referencia de tu proyecto principal.

¡Eso es!

Aunque necesitará hacer algo con sus modelos, póngalos junto con vistas o tenga un tercer proyecto para ellos, de lo contrario tendrá una dependencia circular.

Otro inconveniente es que todos los que trabajarán con las vistas necesitarán esa extensión de Razor Generator.

La forma en que esto funciona es básicamente haciendo que Visual Studio genere archivos .cs desde sus vistas en tiempo de diseño, y son parte de la dll compilada, al igual que cualquier otra pieza de código.