我想创建一个带有嵌套区域的项目结构。例如,我有一个“Home”区域,在这下面我想要“新闻”区域来处理它自己的路线注册,并且当路线指向“新闻”区域中的控制器时将正确地查找视图。通过将“新闻”区域名称更改为“主页/新闻”而不是简单地“新闻”,可以找到正确的视图。在主要的Global.asax.cs中,我实例化所有区域(“Home”和“News”)并单独注册它们,因为RegisterAllAreas()函数只找到一层深的区域(即它只找到并注册“Home” “地区”。
还有其他人尝试过类似的东西吗?这是一个主要的黑客攻击还是一个稳定的长期解决方案?您可以提供的任何建议都非常感谢。
答案 0 :(得分:4)
您可以使用 MvcCodeRouting ,这是一个独立的开源CodePlex项目。
MvcCodeRouting会自动为ASP.NET MVC应用程序创建最佳路径。
- 使用名称空间(不再是区域)组织您的控制器,可以根据需要进行深入。
- 可以在每个参数或每个站点的基础上覆盖的primivite类型的默认约束。
- 智能分组类似路线以进行有效匹配。
- 支持根控制器。
- 检测不明确的路线。
- 路线的格式化(例如,将它们设为小写)。
- 将路线渲染为对MapRoute扩展方法的调用,以进行调试。
- 使用相同的基于命名空间的基本路由来组织您的视图。
醇>
答案 1 :(得分:1)
我相信用控制器创建这样的东西不会有问题,因为它们是使用命名空间找到的。
问题在于观点。
默认情况下,MVC路由(通过ViewEngine)仅使用RouteData集合中的Area,Controller和View值。
这是在虚拟FindView方法中的VirtualPathProviderViewEngine中实现的(并使用非虚拟GetPath)。您必须在ViewEngine中覆盖FindView方法。
这不是一个非常大或复杂的代码量,但你最好的选择是通过源代码和窥探,因为有一些缓存和其他一些东西......