对RouteLink助手方法的行为感到困惑

时间:2014-06-20 13:48:22

标签: asp.net asp.net-mvc asp.net-mvc-4 razor

我不明白为什么下面的第2号链接不起作用:

routes.MapRoute(
   name: "GreetingDefault",
   url: "Greeting/{action}/{id}",
   defaults: new { controller = "Greeting", action = "Index", id = UrlParameter.Optional}
)
;

链接:

1  @Html.ActionLink("ActionLink", "Index", "Greeting", new {area = "" }, null)

2  @Html.RouteLink("RouteLink", "GreetingDefault")

3  @Html.RouteLink("Greet-RouteLink-DisplayGreeting", "GreetingDefault", 
                     new { action = "DisplayGreeting", parameter="abc" }) 

点击第3个链接后,这是HTML:

<a href="/Greeting">ActionLink</a>

<a href="/Greeting/DisplayGreeting">RouteLink</a>

<a href="/Greeting/DisplayGreeting?parameter=abc">Greet-RouteLink-DisplayGreeting</a>  

然后当我点击链接2时,它会停留在链接3页面上。 。而不是去 到&#34;索引&#34;在指定路线中指定。我必须这样做才能使它发挥作用:

2    @Html.RouteLink("RouteLink", "GreetingDefault",
                     new { action = "Index"} )

我在这里看不到什么?感谢

1 个答案:

答案 0 :(得分:1)

原因是RouteLink选择当前操作并在结果网址中使用它。在您的情况下,您位于第3页,这意味着您当前的网址为/Greeting/DisplayGreeting?parameter=abc,因此当前操作为DisplayGreeting。这是RouteLink使用的那个。如果您在页面上,请说/Greeting/AnyOtherActionRouteLink会使用AnyOtherAction进行操作。

底线 - RouteLink在使用当前操作时不使用为路由定义的默认操作。所以基本上你对动作的明确覆盖做了什么是正确的方法。