Html.ActionLink根据URL产生不同的结果

时间:2012-03-09 19:47:25

标签: c# asp.net-mvc-2 html.actionlink

我有网址http://localhost:xyz/HelloWorld,该网址指向HelloWorld控制器中的Home操作。

在URL上呈现的页面上,我有一个指向同一页面的Html.ActionLink(是的,指向您当前所在页面的链接)。

问题是,如果页面加载为http://localhost:xyz/HelloWorld/(带有斜杠),此链接仅指向页面。如果页面加载为http://localhost:xyz/HelloWorld(无斜杠),则会指向Index控制器的Home操作。

我已经尝试了几次重载,但我无法弄清楚导致这种情况的原因或解决方法。

Html.ActionLink("Hello World", "HelloWorld", "Home");
Html.ActionLink("Hello World", "HelloWorld", "Home", null, null);
Html.ActionLink("Hello World", "HelloWorld", "Home", new { arg = 0 }, null);

这些都有完全相同的结果。如果有斜杠,它们可以正常工作,如果没有,则指向http://localhost:xyz/

任何人都可以解释这种行为或如何解决它吗?

编辑(可能相关?):
arg存在但不是0时,同一页面显示在http://localhost:xyz/HelloWorld/arg,并且具有“Hello World”链接(完全正常),以及类似的链接,可以完美运行。

Html.ActionLink("Argument", "HelloWorld", "Home", new {arg = arg}, null);

无论是否存在尾部斜杠,这都能正确指出。

路线

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

routes.MapRoute(
  "Hello World",
  "HelloWorld/{arg}",
  new {controller = "Home", action = "HelloWorld", arg = ""}
);

1 个答案:

答案 0 :(得分:0)

问题解决了。我将路由分为有和没有参数。

routes.MapRoute(
 "Hello World",
 "HelloWorld",
 new {controller = "Home", action = "HelloWorld"}
);

routes.MapRoute(
 "Hello World With Arg",
 "HelloWorld/{arg}",
 new {controller = "Home", action = "HelloWorld", arg = ""}
);