【问题标题】:Html.ActionLink yields different results depending on the URLHtml.ActionLink 根据 URL 产生不同的结果
【发布时间】: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


【解决方案1】:

问题解决了。我区分了有无参数的路线。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 2017-09-11
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多