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

时间:2012-10-16 08:58:13

标签: asp.net-mvc-4 asp.net-mvc-areas 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”元素(并且出现错误“未找到视图'索引'或其主控或没有视图引擎支持搜索位置”)

ASP.NET仍然支持MVC 4吗?因为我发现这个答案可以在将来删除:What are the pros and cons of Areas implemented as single projects vs multiple projects in asp.net mvc

我还没有找到MVC4的任何方法。

解决方案的结构很简单:

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

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:27)

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

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

    public class HomeController: Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
    
  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>
    
  7. 在视图的属性中,将Custom Tool设置为RazorGenerator

  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 = "" }
            );
        }
    }
    
  9. 剩下的就是引用主MVC应用程序中的类库。

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

答案 1 :(得分:0)

就我而言,除了上面达林建议的第9步之外,我已经完成了所有步骤:

  

剩下的就是在主MVC中引用类库   应用。

该解决方案不需要编译参考,因此我忽略了它。但是在运行时,系统无法正确路由请求。只是抬起头,以防别人忽略了这个小问题。