0

我有 URL 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 = ""}
);
4

1 回答 1

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 = ""}
);
于 2012-03-09T20:25:33.303 回答