18

我尝试使用单独项目中的区域创建简单的概念验证 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 implementation 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" }
        );
    }
}
}

谢谢你的帮助!

4

2 回答 2

28

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

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

于 2012-10-16T10:03:22.323 回答
0

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

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

该解决方案不需要参考即可编译,因此我忽略了它。但在运行时,系统未能正确路由请求。只是提醒一下,以防其他人忽略了这个小问题。

于 2019-12-03T22:18:57.150 回答