0

我正在尝试创建遵循树导航系统结构的路线,即我想在我的路线中包含树中的整个路径。所以如果我有一棵看起来像这样的树

  • 电脑
    • 软件
      • 发展
      • 图形
    • 硬件
      • 中央处理器
      • 显卡

然后我希望能够拥有看起来像这样的路线

  • site.com/catalog/computers/software/graphics

这本身并不难,可以通过看起来像这样的路线捕获

  • 目录/{*类别}

但是我希望能够在该 URL 的末尾添加产品信息,就像这样

  • site.com/catalog/computers/software/graphics/title=Photoshop

这意味着我会要求像以下示例一样定义的路线

  • site.com/{*categories}/title={name}
  • site.com/{*categories}

然而,这些路线中的第一个是无效的,因为在诸如 {*categories} 之类的贪婪参数之后不会出现其他任何东西,所以我有点卡住了。我一直在考虑实现正则表达式路由,或者可能使用 IRouteContraint 来解决这个问题,但我想不出一个体面的解决方案,让我也可以使用Html.ActionLink(...)方法生成出站 URL填写了 {*categories} 和 {name}

非常感谢任何建议!

你们中的一些人可能昨天看到了我提出的类似问题,但我已将其删除,因为此后我对其进行了更多思考,并且旧问题包含对我的问题的不完整描述

更新 2008/11/26我在http://thecodejunkie.blogspot.com/2008/11/supporting-complex-route-patterns-with.html发布了解决方案

4

2 回答 2

4

URL 中任意位置的贪婪段

我编写GreedyRoute了支持 URL 中任意位置的贪婪(全部捕获)段的类。您需要它已经有一段时间了,但它将来可能对其他人有用。

它支持以下任何模式:

  • {segment}/{segment}/{*greedy}Route- 默认类已支持此功能
  • {segment}/{*greedy}/{segment}-中间贪心
  • {*greedy}/{segment}/{segment}-一开始很贪心

您可以阅读我的博客文章中的所有详细信息并获取代码。

于 2011-03-15T08:04:59.000 回答
3

路由忽略查询字符串参数。但同时,只要不存在同名的路由 URL 参数,查询字符串参数就会传递给操作方法。所以我将只使用第二条路线,并通过查询字符串传递标题。

另一种选择更复杂。您编写一个从 Route 派生的自定义路由并覆盖 GetRouteData 方法,以便它解析“categories”的值(类似于 RouteData.Values["categories"],然后将解析的数据添加到路由值字典(RouteData.Values [“标题”] = 已解析标题。

于 2008-11-19T08:45:41.553 回答