ASP.NET MVC 4 Области в отдельных проектах не работают (просмотр не найден)

Я попытался создать простой веб-сайт ASP.NET MVC 4 с доказательством концепции с использованием областей в отдельных проектах.

Я попытался выполнить следующие руководства: http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects (приложение не работает в виртуальном каталоге... я использую IIS). Я надеюсь, что есть лучший способ, чем виртуальные каталоги.

Затем я попробовал этот учебник: http://forums.asp.net/t/1483660.aspx/1 Но в *.csproj проекта области нет элемента "AreasManifestDir" (и получена ошибка "Индекс представления" или его мастер не найден, или механизм просмотра не поддерживает найденные местоположения ")

Есть ли поддержка ASP.NET для MVC 4? Поскольку я нашел этот ответ, его можно удалить в будущем: Каковы плюсы и минусы областей, реализованных как отдельные проекты, так и несколько проектов в asp.net mvc

Я не нашел инструкции для MVC4.

Структура решения проста:

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

Routes.cs проекта Admin:

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" }
        );
    }
}
}

Спасибо за любую помощь!

Ответ 1

Вы можете использовать пакет RazorGenerator, чтобы встраивать представления Razor в отдельную сборку. Вот шаги для выполнения этой работы:

  • Установите расширение Razor Generator Visual Studio (Инструменты → Расширения и обновления...)
  • Создайте новое приложение ASP.NET MVC 4, используя пустой шаблон.
  • Добавьте новый проект библиотеки классов в решение под названием AreasLibrary (вы также можете использовать шаблон проекта ASP.NET MVC для получения представлений Intellisense в Razor)
  • Установите RazorGenerator.Mvc NuGet в проект AreasLibrary.
  • Добавьте контроллер внутри проекта AreasLibrary (~/Areas/Admin/Controllers/HomeController.cs):

    public class HomeController: Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
    
  • Добавьте соответствующий вид (~/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>
    
  • В свойствах представления установите Custom Tool в RazorGenerator.

  • Внутри библиотеки классов добавьте ~/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 = "" }
            );
        }
    }
    
  • Все, что осталось, это ссылка на библиотеку классов в основном приложении MVC.

Ссылка: http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html