我正在尝试在我的新MVC项目中获得比Area更深的层。这将是一个相当大的项目,组织对我来说至关重要。理想情况下,我想使用子目录/子文件夹更嵌套的方法,所以像这样:
/社交/事件/管理/编辑/ 1
如果我做这样的事情
public override string AreaName
{
get
{
return "social/events";
}
}
一切都像一个冠军一样工作。 Resharper或VS2013本身并不喜欢这样,并显示一个红色的Return View();但是所有内容都会编译并且路由按预期工作。
有什么“烘焙”会让这个想法变得糟糕吗?从我所看到的,整个区域约定比区域路由的AreaRegistration.Name映射更多。但是因为我们正在使用文字字符串,所以我们知道这有时会如何运作。
我正在使用MVC5,虽然这在技术上适用于此实现,但我想确保我没有违反惯例,或者是否有更好的方法来组织这个更深层次而不仅仅是区域/名称/控制器。会有很多观点,这是一个网站的怪物。
答案 0 :(得分: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
可以作为密钥(所以任何字符串)和目录路径的一部分,您就可以了。