2012-03-09 88 views
0

我已经得到了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 = ""} 
); 
+1

我们可以看看你有你的路线设置? – 2012-03-09 19:54:25

+0

你的论点需要设置为可选 – diaho 2012-03-09 19:59:02

+0

@ M.Babcock路线添加 – yoozer8 2012-03-09 19:59:07

回答

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 = ""} 
);