ASP.NET MVC 4独立项目中的区域不起作用(找不到视图)



我尝试创建简单的概念验证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?因为我发现了这个答案,它可以在未来删除:在asp.net mvc 中,作为单个项目与多个项目实现的Areas的优缺点是什么

我还没有找到任何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" }
);
}
}
}

谢谢你的帮助!

您可以使用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 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应用程序中的类库。

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

在我的情况下,除了Darin上面建议的第9步之外,我已经完成了所有的操作:

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

该解决方案不需要引用来编译,所以我忽略了它。不过,在运行时,系统未能正确路由请求。只是提醒一下,以防其他人忽视了这一点。

最新更新