8

我想创建一个带有嵌套区域的项目结构。例如,我有一个“主页”区域,在此下方我想要处理它自己的路由注册的“新闻”区域,并且当路由指向“新闻”区域中的控制器时会正确找到视图。通过将“新闻”区域名称更改为“主页/新闻”而不是简单的“新闻”,可以找到正确的视图。在主 Global.asax.cs 中,我实例化所有区域(“Home”和“News”)并单独注册它们,因为 RegisterAllAreas() 函数只找到一层深的区域(即它只找到并注册“Home” “ 区域)。

有没有其他人尝试过类似的东西?这是一个重大的黑客攻击还是一个稳定的长期解决方案?非常感谢您提供的任何建议。

4

2 回答 2

4

您可以使用MvcCodeRouting来实现,这是一个单独的开源 CodePlex 项目。

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

  1. 使用可以随心所欲地深入的命名空间(没有更多区域)来组织你的控制器。
  2. 可以基于每个参数或每个站点覆盖的原始类型的默认约束。
  3. 对相似路线进行智能分组,以实现高效匹配。
  4. 支持根控制器。
  5. 检测不明确的路线。
  6. 路线的格式(例如,使它们小写)。
  7. 将您的路线渲染为对 MapRoute 扩展方法的调用,以进行调试。
  8. 使用相同的基于命名空间的基本路由来组织您的视图。
于 2011-02-24T15:06:06.087 回答
1

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

问题在于观点。

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

这是在 VirtualPathProviderViewEngine 中的虚拟 FindView 方法(并使用非虚拟 GetPath)中实现的。您必须在 ViewEngine 中覆盖 FindView 方法。

这不是一个非常大或复杂的代码量,但你最好的选择是通过源代码并四处窥探,因为有一些缓存和其他一些东西......

于 2011-02-24T14:07:45.283 回答