0

在 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/edit/6?overrideId=1

虽然我希望是这样的:

.../clientoverride/edit/6/1

为什么会创建如此不一致的 URL?我该怎么做才能使它看起来像最后带有 clientoverride/edit/6/1 的树结构?

4

2 回答 2

0

将此放在用于clientoverride控制器的所有规则之上:-

    routes.MapRoute(
         name: "Edit",
          url: "{controller}/{action}/{clientId}/{overrideId}",
         defaults: new { controller = "ClientOverride", action = "Edit", clientId = UrlParameter.Optional, overrideId = UrlParameter.Optional }
      );

由于您的默认路线图正在形成这种格式的 url /clientoverride/edit/6?overrideId=1。因此,更改顺序后,它将解决您的问题。

于 2013-10-23T15:46:50.553 回答
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始终假定默认路由格式,因此任何其他参数最终都会变成查询字符串。

确保您的自定义路由也高于默认路由。

于 2013-10-23T15:44:30.433 回答