Asp.net mvc 4 单独项目中的ASP.NET MVC 4区域不工作(未找到视图)

Asp.net mvc 4 单独项目中的ASP.NET MVC 4区域不工作(未找到视图),asp.net-mvc-4,asp.net-mvc-areas,asp.net-4.5,Asp.net Mvc 4,Asp.net Mvc Areas,Asp.net 4.5,我曾尝试使用单独项目中的区域创建简单的概念验证ASP.NETMVC4网站 我尝试了以下教程:(应用程序在虚拟目录中不工作…我使用IIS)。我希望有比虚拟目录更好的方法 然后我尝试了这个教程: 但area项目的*.csproj中没有“AreasManifestDir”元素(并且出现错误“未找到视图“索引”或其主视图,或者没有视图引擎支持搜索的位置”) ASP.NET中是否仍然支持MVC4?因为我发现这个答案,它可以在将来删除: 我还没有找到任何MVC4的操作方法 解决方案的结构很简单: Solut

我曾尝试使用单独项目中的区域创建简单的概念验证ASP.NETMVC4网站

我尝试了以下教程:(应用程序在虚拟目录中不工作…我使用IIS)。我希望有比虚拟目录更好的方法

然后我尝试了这个教程: 但area项目的*.csproj中没有“AreasManifestDir”元素(并且出现错误“未找到视图“索引”或其主视图,或者没有视图引擎支持搜索的位置”)

ASP.NET中是否仍然支持MVC4?因为我发现这个答案,它可以在将来删除:

我还没有找到任何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视图嵌入到单独的程序集中。以下是实现此功能的步骤:

  • 安装剃须刀生成器Visual Studio扩展(工具->扩展和更新…)
  • 使用空模板创建新的ASP.NET MVC 4应用程序
  • 向名为
    AreasLibrary
    的解决方案中添加一个新的类库项目(您还可以使用ASP.NET MVC项目模板在Razor视图中获取Intellisense)
  • razogenerator.Mvc
    numget安装到
    AreasLibrary
    项目
  • 区域库
    项目中添加控制器(
    ~/Areas/Admin/Controllers/HomeController.cs
    ):

  • 添加相应的视图(
    ~/Areas/Admin/Views/Home/Index.cshtml
    ):

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


  • 参考资料:

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

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


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

    对我的问题可能有点不同的答案,但答案是正确的。我想使每个地区不同的项目。因此,步骤1-4是正确的。不必创建一个包含所有区域的项目,但将模型+视图+控制器直接添加到单独的项目中更简单。感谢您的帮助-使用RazorGenerator是解决方案。不,这些区域不是必需的,但是任何MVC开发人员都应该了解这些区域以及如何使用它们来更好地组织things@darin-dimitrov—假设我不想像您在上面的步骤9中所描述的那样将类库引用添加到主MVC应用程序,而是动态添加“发现”我的MVC区域类库。有什么方法可以做到这一点吗?我曾尝试使用Assembly.LoadFrom()来实现这一点,但我似乎从未找到视图。谢谢!我有一些类似的问题,但上述解决方案在我的情况下不起作用。我的问题是:@Rockdosta-你可能会发现这很有用。
    public class HomeController: Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
    
    @* 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>
    
    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 = "" }
            );
        }
    }