ActionLink不会为具有两个参数的操作生成正确的路由URL

anI*_*Mer 0 c# asp.net-mvc html.actionlink razor asp.net-mvc-4

在视图中

@Html.ActionLink("Edit", "Edit", new { id = 1, year = 1 }) 
Run Code Online (Sandbox Code Playgroud)

在控制器中

// GET: /Forecasts/Edit/5
public ActionResult Edit(int id, short year)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

它生成了一个网址

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

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

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

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

Dar*_*rov 5

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

如果您使用默认路由,则不能指望这样的事情:

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

{id}如果你期望这样的网址模式,摆脱从...

routes.MapRoute(
    "Default",
    "{controller}/{action}",
    new { controller = "Home", action = "Index" }
);
Run Code Online (Sandbox Code Playgroud)


ppe*_*rov 5

您正在使用默认路由,其格式如下:

"{controller}/{action}/{id}"
Run Code Online (Sandbox Code Playgroud)

这意味着第一个参数将在没有任何命名的GET参数id之后写入/.

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

"{controller}/{action}"
Run Code Online (Sandbox Code Playgroud)

如果删除id所有参数将被命名.