我已经尝试使用单独项目中的区域创建简单的概念验证ASP.NET MVC 4网站.
@H_502_2@我尝试以下教程:http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects(应用程序不工作在虚拟目录…我使用IIS).我希望有比虚拟目录更好的方法.
@H_502_2@然后我尝试了这个教程:http://forums.asp.net/t/1483660.aspx/1
但是在区域项目的* .csproj中没有“AreasManifestDir”元素(并且出现错误“未找到视图”索引“或其主文件,或者没有视图引擎支持搜索的位置”) @H_502_2@ASP.NET MVC 4中是否仍然支持?因为我发现这个答案可以在将来删除:What are the pros and cons of Areas implemented as single projects vs multiple projects in asp.net mvc @H_502_2@我还没有找到任何MVC4的方法. @H_502_2@解决方案的结构很简单:
但是在区域项目的* .csproj中没有“AreasManifestDir”元素(并且出现错误“未找到视图”索引“或其主文件,或者没有视图引擎支持搜索的位置”) @H_502_2@ASP.NET MVC 4中是否仍然支持?因为我发现这个答案可以在将来删除:What are the pros and cons of Areas implemented as single projects vs multiple projects in asp.net mvc @H_502_2@我还没有找到任何MVC4的方法. @H_502_2@解决方案的结构很简单:
Solution 'MvcAreasMultiProject' Areas [Directory] Admin [Project] Models Views Controllers Routes.cs [Examples] MvcAreasMultiProject [MainProject] - References Admin project M.V.C@H_502_2@管理项目的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" } ); } } }@H_502_2@感谢任何帮助!
解决方法
您可以使用
RazorGenerator软件包将您的Razor视图嵌入到单独的程序集中.以下是使这项工作的步骤:
@H_502_2@>安装Razor Generator Visual Studio扩展(工具 – >扩展和更新…)
>使用空模板创建一个新的ASP.NET MVC 4应用程序.
>将一个新的类库项目添加到名为AreasLibrary的解决方案中(您也可以使用ASP.NET MVC项目模板,以获取Razor视图中的Intellisense)
>将RazorGenerator.Mvc NuGet安装到AreasLibrary项目.
>在AreasLibrary项目(〜/ Areas / Admin / Controllers / HomeController.cs)中添加一个控制器:
>在类库里加一个〜/ Areas / AdminAreaRegistration.cs:
>使用空模板创建一个新的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(); } }@H_502_2@>添加相应的视图(〜/ 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>@H_502_2@>在视图的属性中,将自定义工具设置为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 = "" } ); } }@H_502_2@>剩下的只是引用主MVC应用程序中的类库. @H_502_2@参考:http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html