在Index.cshtml中有以下链接:
@Html.ActionLink("Edit", "Edit", new { clientId = item.ClientId , overrideId=item.OverrideId})
并路由为:
routes.MapRoute(
name: "Edit",
url: "{controller}/{action}/{clientId}/{overrideId}",
defaults: new { controller = "ClientOverride", action = "Edit", clientId = UrlParameter.Optional, overrideId = UrlParameter.Optional }
);
从Index到Edit重定向时,会创建以下URL:
... / clientoverride /编辑/ 6?overrideId = 1
虽然我希望有类似的东西:
... / clientoverride /编辑/ 6/1
为什么会创建如此不一致的URL?我该怎么做才能使它看起来像一个树结构,最后是clientoverride / edit / 6/1?
答案 0 :(得分:0)
尝试使用Html.RouteLink
代替Html.ActionLink
。
对于具有多个参数的路由的链接,最好使用@Html.RouteLink
作为自定义路由。
在您的实例中,您使用@Html.RouteLink("Edit", "Edit", new { clientId = item.ClientId, overrideId = item.OverrideId})
以上示例使用Html.RouteLink(LINKTEXT, ROUTENAME, VALUES)
您获得所见URL的原因是Html.ActionLink
始终采用默认路由格式,因此任何其他参数最终都会转换为查询字符串。
确保您的自定义路线也高于默认路线。
答案 1 :(得分:0)
clientoverride
控制器的所有规则之上: - routes.MapRoute(
name: "Edit",
url: "{controller}/{action}/{clientId}/{overrideId}",
defaults: new { controller = "ClientOverride", action = "Edit", clientId = UrlParameter.Optional, overrideId = UrlParameter.Optional }
);
由于您的默认路线图正在以此格式/clientoverride/edit/6?overrideId=1
形成网址。因此,在更改序列后,它将解决您的问题。