asp.net-mvc-4 asp.net-mvc-areas asp.net-4.5

ASP.NET MVC 4 Áreas en proyectos separados que no funcionan(vista no encontrada)



asp.net-mvc-4 asp.net-mvc-areas (1)

He intentado crear un sitio web de ASP.NET MVC 4 simple de prueba de concepto utilizando áreas en proyectos separados.

Intenté seguir los tutoriales: http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects (la aplicación no funciona en el directorio virtual ... uso IIS). Espero que haya mejor manera que directorios virtuales.

Luego probé este tutorial: http://forums.asp.net/t/1483660.aspx/1 Pero no hay un elemento "AreasManifestDir" en * .csproj del proyecto del área (y se obtuvo el error "La vista ''Índice'' o su no se encontró el maestro o ningún motor de vista admite las ubicaciones buscadas ")

¿Todavía hay soporte en ASP.NET para MVC 4? Porque encontré esta respuesta que puede ser eliminada en el futuro: ¿Cuáles son los pros y los contras de Áreas implementadas como proyectos únicos frente a múltiples proyectos en asp.net mvc?

No he encontrado ningún manual de instrucciones para MVC4.

La estructura de la solución es simple:

Solution ''MvcAreasMultiProject'' Areas [Directory] Admin [Project] Models Views Controllers Routes.cs [Examples] MvcAreasMultiProject [MainProject] - References Admin project M.V.C

Routes.cs del proyecto de administración:

namespace Admin { public class Routes : AreaRegistration { public override string AreaName { get { return "Admin"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Admin_Default", "Admin/{action}/{id}", new { controller = "Admin", action = "Index", id = "" }, new[] { "Admin.Controllers" } ); } } }

¡Gracias por cualquier ayuda!


Podría usar el paquete RazorGenerator para incrustar sus vistas de Razor en un conjunto separado. Aquí están los pasos para hacer este trabajo:

  1. Instala la extensión de Razor Generator Visual Studio (Herramientas -> Extensiones y actualizaciones ...)
  2. Cree una nueva aplicación ASP.NET MVC 4 usando la plantilla vacía.
  3. Agregue un nuevo proyecto de biblioteca de clases a la solución llamada AreasLibrary (también puede usar una plantilla de proyecto MVC de ASP.NET para obtener Intellisense en las vistas de Razor)
  4. Instale RazorGenerator.Mvc NuGet en el proyecto AreasLibrary .
  5. Agregue un controlador dentro del proyecto AreasLibrary ( ~/Areas/Admin/Controllers/HomeController.cs ):

    public class HomeController: Controller { public ActionResult Index() { return View(); } }

  6. Agregue una vista correspondiente ( ~/Areas/Admin/Views/Home/Index.cshtml ):

    @* Generator: MvcView *@ @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>View1</title> </head> <body> <div> Index view </div> </body> </html>

  7. En las propiedades de la vista, configure la Custom Tool en RazorGenerator .

  8. Dentro de la biblioteca de clases agregue un ~/Areas/AdminAreaRegistration.cs :

    public class AdminAreaRegistration : AreaRegistration { public override string AreaName { get { return "Admin"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Admin_Default", "Admin/{action}/{id}", new { controller = "Home", action = "Index", id = "" } ); } }

  9. Todo lo que queda es hacer referencia a la biblioteca de clases en la aplicación principal MVC.

Referencia: http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html