【发布时间】:2012-03-09 19:47:24
【问题描述】:
我有 URL http://localhost:xyz/HelloWorld,它指向 Home 控制器中的 HelloWorld 操作。
在以 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.MapRoute(
"HomeStart",
"",
new { controller = "Home", action = "Index" }
);
routes.MapRoute(
"Hello World",
"HelloWorld/{arg}",
new {controller = "Home", action = "HelloWorld", arg = ""}
);
【问题讨论】:
-
我们可以看看你是如何设置路线的吗?
-
您的参数需要设置为可选
-
@diaho 我用可选参数试过了,得到了同样的结果。
-
@Jim - 只是猜测,但您的
routes.MapRoute的第二个参数不应该看起来更像:"{controller}/{action}/{arg}"(或实际适用于您的路线的东西)?
标签: c# asp.net-mvc-2 html.actionlink