Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc RouteValueDictionary被上下文覆盖_Asp.net Mvc_Routing - Fatal编程技术网

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(我更喜欢前者,它的堆更整齐)传递给控制器,然后从中整理业务逻辑

要多久你的路线图才会变得完全笨重,有很多不同的搜索组合