2010-09-16 84 views
8

我想创建一个嵌套区域的项目结构。例如,我有一个“家庭”区域,在此之下,我希望处理它自己的路线注册的“新闻”区域能够在路线指向“新闻”区域中的控制器时正确找到视图。通过将“新闻”区域名称更改为“主页/新闻”而不是简单地将“新闻”更改为正确的视图。在主要的Global.asax.cs中,我实例化了所有的区域(“Home”和“News”)并分别注册它们,因为RegisterAllAreas()函数只找到一个深度的区域(即它只查找并注册“Home “区域)。是否可以在ASP.NET MVC 2中嵌套区域?

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

+0

ASP.NET MVC的好处之一是更简单和可读的URL。嵌套区域越多,网址越长,并且友善程度越低。你真的需要嵌套吗?只是一个想法(对不起,我不知道你的问题的答案)。 – 2011-02-23 01:52:32

回答

1

我相信用控制器创建类似的东西不会成为问题,因为它们是使用名称空间找到的。

问题是与意见。

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

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

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

4

你可以做到这一点MvcCodeRouting,一个单独的开源CodePlex项目。

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

  1. 使用名称空间(没有更多的地区)组织你的控制器只要你想,可以去深。
  2. 可以在每个参数或每个站点上重写的原始类型的默认约束。
  3. 高效匹配的类似路线的智能分组。
  4. 支持根控制器。
  5. 检测不明确的路线。
  6. 路线格式(例如,使它们小写)。
  7. 将您的路线作为调用MapRoute扩展方法进行调试。
  8. 使用相同的基于命名空间的基本路线来组织您的视图。
+0

+1有帮助的链接,但通常只有链接到另一个网站的答案要好得多,因为他们有一些额外的解释性文字或链接中至少有相关的相关引用。我添加了一个引用并突出显示了实际回答问题的相关部分。 – 2011-02-24 17:00:26

+0

@Samuel Neff:感谢编辑,我急着回答。 – 2011-02-24 18:15:32