RouteValueDictionary被上下文覆盖

时间:2008-11-25 10:24:04

标签: asp.net-mvc routing

如果你有路线:

routes.MapRoute("search", "{controller}/{action}/{filter1}/{filter2}/{filter3}", _
  New With {.filter1 = "", .filter2 = "", .filter3 = ""})

然后在路径模式满意的视图中使用/member/search/dev/phil/hoy的网址,当您尝试创建另一个仅存在filter1的路由网址时,即

<%=Url.RouteUrl(New RouteValueDictionary(
  New With {.controller="member",.action="search", .filter1="dev"}))%>

结果是当前路线/member/search/dev/phil/hoy,而不是预期的修剪路线/member/search/dev

我已经设法直接使用RouteTable.Routes.GetVirtualPath方法解决了这个问题,但有没有人知道它为什么会这样工作,或者它可能是一个错误?

2 个答案:

答案 0 :(得分:0)

您可以尝试以下操作,看看它是否有效。

放置此,

routes.MapRoute("search", "{controller}/{action}/{filter1}/", _
  New With {.controller="member",.action="search", .filter1="dev"})

..之前,

routes.MapRoute("search", "{controller}/{action}/{filter1}/{filter2}/{filter3}", _
  New With {.filter1 = "", .filter2 = "", .filter3 = ""})

特定于通用。

答案 1 :(得分:0)

MVC中的C不代表复杂......

我相信你不应该使用URL路由来实现这种类型的功能 - 你最好将这种数据传递给CONTROL或GET(我更喜欢前者更整洁)到CONTROLLER,然后整理出来那里的商业逻辑。

使用多种不同的搜索组合,路线图变得完全笨拙之前会有多长时间?