ASP.NET MVC 2是否支持嵌套区域?

8
我想创建一个具有嵌套区域的项目结构。例如,我有一个“主页”区域,在此之下我想要一个“新闻”区域,该区域处理自己的路由注册,并且当路由指向“新闻”区域中的控制器时,可以正确地找到视图。通过将“新闻”区域名称更改为“Home / News”,而不仅仅是“News”,就可以找到正确的视图。在主Global.asax.cs文件中,我实例化所有区域(“主页”和“新闻”)并单独注册它们,因为RegisterAllAreas()函数只能找到一级深度的区域(即它只能找到并注册“主页”区域)。
有其他人尝试过类似的事情吗?这是一个重大的黑客行为,还是可以成为稳定的长期解决方案?非常感谢您提供的任何建议。

ASP.NET MVC 的一个好处是更简单和易读的 URL。嵌套区域越多,URL 就会越长,也就越不友好。你真的需要嵌套吗?这只是一个想法(抱歉,我不知道你问题的答案)。 - Samuel Neff
2个回答

4

你可以使用 MvcCodeRouting 来实现,它是一个独立的开源 CodePlex 项目。

MvcCodeRouting 可以自动为你的 ASP.NET MVC 应用程序创建最佳路由。

  1. 使用命名空间组织你的控制器(不再需要区域),可以深入任意层级
  2. 针对基元类型的默认约束,可以在每个参数或每个站点上进行覆盖。
  3. 智能分组类似的路由以提高匹配效率。
  4. 支持根控制器。
  5. 检测到模糊路由。
  6. 格式化路由(例如使它们小写)。
  7. 将你的路由呈现为调用 MapRoute 扩展方法的方式,以进行调试。
  8. 使用相同的基于命名空间的基础路由来组织你的视图。

+1 对于有用的链接表示赞赏,但是通常情况下,如果链接附带一些额外的解释性文本或至少是来自链接的好引用,那么答案会更好。我添加了一个引用并突出了实际回答问题的相关部分。 - Samuel Neff

1

我相信使用控制器创建这样的东西不会有问题,因为它们可以在命名空间中找到。

问题在于视图。

MVC路由(通过ViewEngine)默认只使用RouteData集合中的Area、Controller和View值。

这是在VirtualPathProviderViewEngine的虚拟FindView方法中实现的(并使用非虚拟GetPath)。你需要在你的ViewEngine中重写FindView方法。

这不是很大或复杂的代码量,但最好的办法是查看源代码并四处窥探,因为有一些缓存和其他事情......


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接