【问题标题】:MVC URL structureMVC URL 结构
【发布时间】:2013-10-23 15:14:43
【问题描述】:

在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 的树结构?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-routing actionlink


    【解决方案1】:

    将此放在用于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。因此,更改顺序后,它将解决您的问题。

    【讨论】:

    • 谢谢你——它就像一个魅力:把它放在路线的顶部;得到的 URL 为:.../clientoverride/Edit/6/1
    【解决方案2】:

    尝试使用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 始终采用默认路由格式,因此任何其他参数最终都会变成查询字符串。

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

    【讨论】:

      猜你喜欢
      • 2010-10-19
      • 2014-03-02
      • 2010-12-07
      • 2010-12-24
      • 2012-01-17
      • 2017-03-12
      • 2013-11-24
      • 2011-01-13
      • 1970-01-01
      相关资源
      最近更新 更多