ASP.NET MVC 4单独项目中的区域不起作用(查看未找到)

Tom*_*ino 17 asp.net-mvc-areas asp.net-mvc-4 asp.net-4.5

我尝试使用单独项目中的区域创建简单的概念验证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"元素(并且得到错误"视图'索引'或其未找到master或视图引擎没有支持搜索的位置")

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
Run Code Online (Sandbox Code Playgroud)

Admin项目的Routes.cs:

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" }
        );
    }
}
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Dar*_*rov 27

您可以使用RazorGenerator包将Razor视图嵌入到单独的程序集中.以下是使这项工作的步骤:

  1. 安装Razor GeneratorVisual Studio扩展(工具 - >扩展和更新...)
  2. 使用空模板创建新的ASP.NET MVC 4应用程序.
  3. 将新的类库项目添加到名为的解决方案中AreasLibrary(您还可以使用ASP.NET MVC项目模板以在Razor视图中获取Intellisense)
  4. RazorGenerator.MvcNuGet 安装到AreasLibrary项目中.
  5. AreasLibrary项目中添加一个控制器(~/Areas/Admin/Controllers/HomeController.cs):

    public class HomeController: Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  6. 添加相应的视图(~/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>
    
    Run Code Online (Sandbox Code Playgroud)
  7. 在视图的属性中设置Custom ToolRazorGenerator.

  8. 在类库中添加一个~/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 = "" }
            );
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  9. 剩下的就是引用主MVC应用程序中的类库.

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