Html.ActionLink根据URL产生不同结果
问题描述:
我已经得到了URL http://localhost:xyz/HelloWorld
,它指向Home
控制器中的HelloWorld
动作。Html.ActionLink根据URL产生不同结果
在页面上呈现的URL上,我有一个Html.ActionLink指向同一页面(是,指向当前页面的链接)。
问题是如果页面加载为http://localhost:xyz/HelloWorld/
(带有斜线),则此链接仅指向页面。如果页面被加载为http://localhost:xyz/HelloWorld
(无斜线),则它将指向Home
控制器的Index
操作。
我已经尝试了几个重载,但我无法弄清楚是什么导致了这个问题或者如何解决它。
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:
routes.MapRoute(
"HomeStart",
"",
new { controller = "Home", action = "Index" }
);
routes.MapRoute(
"Hello World",
"HelloWorld/{arg}",
new {controller = "Home", action = "HelloWorld", arg = ""}
);
答
问题解决了。我分开了有和没有参数的路线。
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-09 19:54:25
你的论点需要设置为可选 – diaho 2012-03-09 19:59:02
@ M.Babcock路线添加 – yoozer8 2012-03-09 19:59:07