我正在尝试创建遵循树导航系统结构的路线,即我想在路线中包含树中的整个路径。所以,如果我有一棵看起来像这样的树
然后我希望能够拥有这样的路线
这个,它本身并不难,可以通过看起来像这样的路线来抓住
但是,我希望能够在该URL的末尾添加产品信息,如下所示
这意味着我会要求像以下示例所定义的路线
然而,这些路线中的第一条是无效的,因为在诸如{* categories}之类的贪婪参数之后没有其他任何东西可以出现,所以我有点卡住了。我一直在考虑实现正则表达式路由或者可能使用IRouteContraint来解决这个问题,但是我想不出一个能让我使用 Html.ActionLink(...)生成包含{* categories}和{name}
的outbount URL的方法任何建议都非常重要!
你们中的一些人昨天可能已经看到了类似的问题,但是我已经删除了这个问题,因为我已经更多地考虑了这个问题,而旧的问题包含对我的问题的不完整描述 < / p>
更新2008/11/26 我在http://thecodejunkie.blogspot.com/2008/11/supporting-complex-route-patterns-with.html发布了解决方案
答案 0 :(得分:4)
我写过GreedyRoute
类,它支持URL中任何位置的贪婪(catch all)段。你需要它已经有一段时间了,但是将来可能对其他人有用。
它支持以下任何模式:
{segment}/{segment}/{*greedy}
- 默认Route
类{segment}/{*greedy}/{segment}
- 中间贪婪 {*greedy}/{segment}/{segment}
- 贪婪 您可以阅读所有详细信息on my blog post并获取代码。
答案 1 :(得分:3)
路由忽略查询字符串参数。但同时,只要没有相同名称的路由URL参数,查询字符串参数就会传递给操作方法。所以我只使用第二条路线,并通过查询字符串传递标题。
另一个选择更复杂。您编写一个派生自Route的自定义路由并覆盖GetRouteData方法,以便它解析“categories”的值(类似于RouteData.Values [“categories”],然后将解析后的数据添加到路由值字典(RouteData.Values) [“title”] = parsedTitle。