我尝试以下教程: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
管理项目的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" } ); } } }
感谢任何帮助!
解决方法
>安装Razor Generator Visual Studio扩展(工具 – >扩展和更新…)
>使用空模板创建一个新的ASP.NET MVC 4应用程序.
>将一个新的类库项目添加到名为AreasLibrary的解决方案中(您也可以使用ASP.NET MVC项目模板,以获取Razor视图中的Intellisense)
>将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>
>在视图的属性中,将自定义工具设置为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",new { controller = "Home",id = "" } ); } }
>剩下的只是引用主MVC应用程序中的类库.
参考:http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html