2

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

/social/events/admin/edit/1

如果我做这样的事情

public override string AreaName 
    {
        get 
        {
            return "social/events";
        }
    }

一切似乎都像冠军一样工作。Resharper 或 VS2013 本身不喜欢这样并显示一个红色的 Return View();,但是一切都编译并且路由按预期工作。

有什么“老生常谈”的东西让这成为一个坏主意吗?据我所见,整个 Area 约定仅比 AreaRegistration.Name 映射到路线多一点。但是由于我们使用的是文字字符串,嗯.. 我们知道这有时是如何工作的。

我正在使用 MVC5,虽然这在此实现中在技术上有效,但我想确保我没有违反约定,或者是否有比区域/名称/控制器更深层次组织它的更好方法。会有很多观点,这是一个网站的怪物。

4

1 回答 1

0

区域有两个目的:

当您进行路由查找时,它将路由分组在逻辑组中,就像在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可以用作键(因此任何字符串)并作为目录路径的一部分,就可以了。

于 2013-10-26T09:08:31.563 回答