【问题标题】:Html.ActionLink adding params with ? and & instead of slashesHtml.ActionLink 添加参数?和 & 而不是斜杠
【发布时间】:2013-08-29 18:39:37
【问题描述】:

这是我的简单操作链接:

<span>@Html.ActionLink(trip.TripDescription, "Index", "Home", new { trip = trip.Trpp, year = trip.TripYear })</span>

这是我通往该链接的路线:

routes.MapRoute(
                "Index",
                "{controller}/{action}/{trip}/{year}",
                new { controller = "Home", action = "Index", trip = "", year = "" }
            );

这是正在渲染的内容:

http://localhost:31065/Home/Index?trip=Green&year=2013

我希望它改为呈现这个:

http://localhost:31065/Home/Index/Green/2013

这两个网址都可以,但在外观上我更喜欢后者。

我需要改变什么来让参数放在斜线后面而不是使用老派?和&

TIA

【问题讨论】:

  • 我希望它能够按照您的方式工作。如果在路由定义中没有设置trip = "", year = ""怎么办?
  • 在您展示的路线之前,您是否还定义了其他路线?
  • @QuetiM.Porta 当我从路由中删除这些参数时,呈现的 url 是:localhost:31065/Home/Index?Length=4 这根本不起作用。
  • @dombenoit 我有一个新的 MVC 4 项目附带的默认路由,在我下面列出的项目之前,它只包含:控制器、操作和可选 ID
  • @ChristopherJohnson 会这样做,默认路由将首先匹配,而您想要的路由永远不会被击中。请参阅下面的答案。

标签: asp.net-mvc-4 asp.net-mvc-routing razor-2 html.actionlink


【解决方案1】:

看起来您的Index 路由从未被击中,可能是由于之前定义的其他路由。始终首先保留最具体的路由定义,并将默认的Controller/Action/Id 保留在最后定义。

routes.MapRoute(
    "Index",
    "{controller}/{action}/{trip}/{year}",
    new { controller = "Home", action = "Index" }
);

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Default", action = "Index", id = UrlParameter.Optional }
);

【讨论】:

  • 这行得通。为什么从路由中删除参数会改变事情?
  • 这不是真的,它修复了交换订单路线的定义。路线从上到下,首先匹配的路线将被使用。在您的情况下,这是默认的 MVC 路由,而不是您的自定义路由。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 2012-12-13
  • 2014-04-27
  • 2018-06-10
  • 2011-01-11
  • 2017-09-09
相关资源
最近更新 更多