【问题标题】:ActionLink doesn't generate proper routing url for actions which has two parametersActionLink 不会为具有两个参数的操作生成正确的路由 URL
【发布时间】:2013-05-15 14:56:02
【问题描述】:

在视图中

@Html.ActionLink("Edit", "Edit", new { id = 1, year = 1 }) 

在控制器中

// GET: /Forecasts/Edit/5
public ActionResult Edit(int id, short year)
{
    ...
}

它生成了一个类似

的 url

http://<localhost>/controllername/actionname/1?year=1

我希望 actionlink 生成如下 URL: http://<localhost>/controllername/actionname/?id=1&year=1

这个url不能被MVC默认路由解释,为什么这个url没有按照预期的方式生成?谢谢。

更新: 现在我发现这是一个错字导致我遇到了这个问题,但是下面的答案仍然足够好,因为它可以帮助我进一步了解路线的工作方式

【问题讨论】:

  • 因为您使用的是默认路由。你声明了哪些路线?

标签: c# asp.net-mvc asp.net-mvc-4 razor html.actionlink


【解决方案1】:

您使用的是默认路由,其格式如下:

"{controller}/{action}/{id}"

这意味着第一个参数将是id,并且将写在/ 之后,没有任何命名的 GET 参数。

如果你想在任何地方都有显式参数,只需使用这个路由配置:

"{controller}/{action}"

如果您删除id,您的所有参数都将被命名。

【讨论】:

  • 谢谢你,现在我明白为什么它没有生成明确的 url。
【解决方案2】:

我希望 actionlink 生成如下 URL:http://<localhost>/controllername/actionname/?id=1&year=1

如果你使用默认路由,你不能期待这样的事情:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

如果您期望这样的 url 模式,请从 {id} 中删除:

routes.MapRoute(
    "Default",
    "{controller}/{action}",
    new { controller = "Home", action = "Index" }
);

【讨论】:

  • 谢谢你的朋友,和@ppetrov一样的答案,不过他早点回复了。很遗憾我不能将两者都标记为答案,不知道为什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多