Asp.net mvc RouteValueDictionary被上下文覆盖
如果您有路线:Asp.net mvc RouteValueDictionary被上下文覆盖,asp.net-mvc,routing,Asp.net Mvc,Routing,如果您有路线: routes.MapRoute("search", "{controller}/{action}/{filter1}/{filter2}/{filter3}", _ New With {.filter1 = "", .filter2 = "", .filter3 = ""}) 然后在url为/member/search/dev/phil/hoy的路由模式满足的视图中,当您尝试创建另一个仅存在过滤器1的路由url时,即 <%=Url.RouteUrl(New Route
routes.MapRoute("search", "{controller}/{action}/{filter1}/{filter2}/{filter3}", _
New With {.filter1 = "", .filter2 = "", .filter3 = ""})
然后在url为/member/search/dev/phil/hoy
的路由模式满足的视图中,当您尝试创建另一个仅存在过滤器1
的路由url时,即
<%=Url.RouteUrl(New RouteValueDictionary(
New With {.controller="member",.action="search", .filter1="dev"}))%>
结果是当前路由/member/search/dev/phil/hoy
,而不是预期的修剪路由/member/search/dev
我已经通过直接使用RouteTable.Routes.GetVirtualPath方法解决了这个问题,但是有人知道它为什么会这样工作,或者它可能是一个bug吗?您可以尝试下面的方法,看看它是否有效 把这个
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 = ""})
特定于泛型。MVC中的C不代表复杂 我相信您不应该使用URL路由来实现这种类型的功能-您最好将这种数据作为POST或GET(我更喜欢前者,它的堆更整齐)传递给控制器,然后从中整理业务逻辑 要多久你的路线图才会变得完全笨重,有很多不同的搜索组合