ASP.NET MVC 2 中可以嵌套区域吗?

发布于 2024-09-19 17:49:24 字数 312 浏览 10 评论 0原文

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

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

I would like to create a project structure with nested areas. For instance I have a "Home" area and underneath this I would like the "News" area that handles it's own route registration and will properly find views when a route points to a controller in the "News" area. By changing the "News" area name to be "Home/News" instead of simply "News", the proper views are found. In the main Global.asax.cs, I instantiate all of the areas ("Home" and "News") and register them individually because the RegisterAllAreas() function only finds areas one level deep (i.e. it only finds and registers the "Home" area).

Has anyone else tried something similar? Is this a major hack or can this be a stable long-term solution? Any advice you can offer is much appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

提赋 2024-09-26 17:49:25

您可以使用 MvcCodeRouting(一个单独的开源 CodePlex 项目)来完成此操作。

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

  1. 使用命名空间(不再有区域)组织您的控制器,深度可以随您的需要
  2. 可以针对每个参数或每个站点覆盖的原始类型的默认约束。
  3. 对相似路线进行智能分组,以实现高效匹配。
  4. 支持根控制器。
  5. 检测不明确的路线。
  6. 路线格式(例如,将其设为小写)。
  7. 将您的路线渲染为对 MapRoute 扩展方法的调用,以进行调试。
  8. 使用相同的基于命名空间的基本路由来组织视图。

You can do it with MvcCodeRouting, a seprate open-source CodePlex project.

MvcCodeRouting automatically creates the best possible routes for your ASP.NET MVC application.

  1. Organize your controllers using namespaces (no more areas) that can go as deep as you want.
  2. Default constraints for primivite types that can be overriden on a per-parameter or per-site basis.
  3. Intelligent grouping of similar routes for efficient matching.
  4. Support for a root controller.
  5. Detection of ambiguous routes.
  6. Formatting of routes (e.g. make them lower case).
  7. Render your routes as calls to the MapRoute extension method, for debugging.
  8. Use the same namespace-based base route for organizing your Views.
眼前雾蒙蒙 2024-09-26 17:49:25

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

问题出在观点上。

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

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

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

I believe that creating something like this with the Controllers won't be a problem, because they're found using namespace.

The problem is with the views.

By default the MVC routing (through the ViewEngine) only uses the Area, Controller and View values in the RouteData collection.

This is implemented in the VirtualPathProviderViewEngine in virtual FindView method(s) (and using non virtual GetPath). You'll have to override FindView methods in your ViewEngine.

It's not a very large or complicated amount of code, but your best bet is going through the source and snooping around, because there's some caching going around and some other things...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文