Asp.net mvc MVC Areaname/AreaRegistration:对子文件夹使用斜杠是否可以接受?

Asp.net mvc MVC Areaname/AreaRegistration:对子文件夹使用斜杠是否可以接受?,asp.net-mvc,asp.net-mvc-5,Asp.net Mvc,Asp.net Mvc 5,在我的新MVC项目中,我试图获得比区域更深的一层。这将是一个相当大的项目,组织对我来说是关键。理想情况下,我希望使用更嵌套的方法来使用子目录/子文件夹,例如: /社交/活动/管理/编辑/1 如果我做这样的事 public override string AreaName { get { return "social/events"; } } 一切似乎都像冠军一样。Resharper或VS2013本身不喜

在我的新MVC项目中,我试图获得比区域更深的一层。这将是一个相当大的项目,组织对我来说是关键。理想情况下,我希望使用更嵌套的方法来使用子目录/子文件夹,例如:

/社交/活动/管理/编辑/1

如果我做这样的事

public override string AreaName 
    {
        get 
        {
            return "social/events";
        }
    }
一切似乎都像冠军一样。Resharper或VS2013本身不喜欢这种情况,并显示红色返回视图();,但是,一切都已编译,路由也按预期工作

有没有什么“被烤”的东西使这成为一个坏主意?从我所看到的,整个区域约定比区域注册.名称映射到路由要简单得多。但是由于我们使用的是文字字符串,那么。。我们知道这有时是如何运作的


我使用的是MVC5,虽然这在技术上在这个实现中是可行的,但我想确保我没有打破惯例,或者是否有更好的方法在更深层次上组织它,而不仅仅是区域/名称/控制器。将会有很多视图,这是一个巨大的站点。

区域有两个用途:

在执行路由查找时,它将路由分组到逻辑组中,如在
GetVirtualPathForArea
方法中

它确定属于某个区域的视图的部分虚拟路径,从而也对视图进行分组。以下路径中的占位符
{2}

AreaViewLocationFormats = new[]
{
    "~/Areas/{2}/Views/{1}/{0}.cshtml",
    "~/Areas/{2}/Views/{1}/{0}.vbhtml",
    "~/Areas/{2}/Views/Shared/{0}.cshtml",
    "~/Areas/{2}/Views/Shared/{0}.vbhtml"
};
AreaMasterLocationFormats = new[]
{
    "~/Areas/{2}/Views/{1}/{0}.cshtml",
    "~/Areas/{2}/Views/{1}/{0}.vbhtml",
    "~/Areas/{2}/Views/Shared/{0}.cshtml",
    "~/Areas/{2}/Views/Shared/{0}.vbhtml"
};
AreaPartialViewLocationFormats = new[]
{
    "~/Areas/{2}/Views/{1}/{0}.cshtml",
    "~/Areas/{2}/Views/{1}/{0}.vbhtml",
    "~/Areas/{2}/Views/Shared/{0}.cshtml",
    "~/Areas/{2}/Views/Shared/{0}.vbhtml"
};

因此,只要您的
AreaName
可以作为键(任何字符串)和目录路径的一部分,您就可以了。

我喜欢Darins在这一部分的评论。.使用区域!创建您自己的视图引擎..嗯,我会马上开始:)这是允许您嵌套区域,还是只将类似区域分组到顶级文件夹中?我看到了该线程(我一直在到处寻找),但我已经在使用区域,并开始看到“正常”操作的深度限制。实际位置是/areas/social/events/。。。。是的,创建我自己的视图引擎是一个不太可能的解决方案。如果我唯一的选择是:)@TimMedora,那么我最好把时间花在浏览一个文件夹中的300个视图上。在通常的区域/主页/控制器中,它允许我执行区域/社交/事件/控制器和区域/社交/事件/视图/{folder}。。。每个“分区”都有一个AreaRegistration.cs。似乎我看到的每个视图中都必须有一个web.config。您可以随时查看MVC源代码,但我很确定它不是这样工作的,所以将来可能会崩溃。对于组织,您可以为视图和控制器添加子文件夹…只需多做一点工作。