我有关于RouteLink与ActionLink的一个问题。

考虑以下路线

routes.MapRoute("Routename1",
    "{someEnum}/SpecificAction/{id}/{stringId}",
    new { controller = "MyController", id = (int?)null, stringId= (string)null, action = "SpecificAction" },
    new { someEnum= "(EnumVal1|EnumVal2)" }
);

怪异{someEnum}部分是我用一般的控制器,用于形成一个URL的典型控制器部分枚举的所有值。例如,/ EnumVal1 /动作/和/ EnumVal2 /动作/使用相同的控制器。这不是问题的一部分,但是。

考虑连接的以下两种方式:

<%=Html.RouteLink("Click me","Routename1", new { id = 32, stringId = "Yatzy" })%> 
<%=Html.ActionLink("Click me", "SpecificAction", "EnumVal1", new { id = 32, stringId = "Yatsy" }, null)%>

在RouteLink生成正确的URL,这将是/ EnumVal1 / SpecificAction / 32 /掷骰子

在ActionLink的产生看起来像/ EnumVal1 / SpecificAction / 32?的StringID =掷骰子

的URL

这是为什么?可能有人给我讲解一下,谢谢。

有帮助吗?

解决方案

RouteLink href="http://blogs.teamb.com/craigstuntz/2009/03/18/38085/" rel="nofollow noreferrer">永远只能使用指定中的一个路径。 ActionLink将使用第一个匹配的路由,无论是你有意或无意的一个。你的两个例子都可能匹配不同的路线。

菲尔哈克的路由调试将有助于澄清此

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top