C# ActionLink没有';t为具有两个参数的操作生成正确的路由url

C# ActionLink没有';t为具有两个参数的操作生成正确的路由url,c#,asp.net-mvc,asp.net-mvc-4,razor,html.actionlink,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,Html.actionlink,在视图中 @Html.ActionLink("Edit", "Edit", new { id = 1, year = 1 }) 在控制器中 // GET: /Forecasts/Edit/5 public ActionResult Edit(int id, short year) { ... } 它生成了一个url,如 http:///controllername/actionname/1?year=1 我希望actionlink生成如下URL: http:///controlle

在视图中

@Html.ActionLink("Edit", "Edit", new { id = 1, year = 1 }) 
在控制器中

// GET: /Forecasts/Edit/5
public ActionResult Edit(int id, short year)
{
    ...
}
它生成了一个url,如

http:///controllername/actionname/1?year=1

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

MVC默认路由无法解释此url,为什么不按预期方式生成此url?谢谢

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

我希望actionlink生成一个URL,如:
http:///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" }
);

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

"{controller}/{action}/{id}"
这意味着第一个参数将是
id
,并将在
/
之后写入,而不包含任何命名的GET参数

如果希望在任何地方都有显式参数,只需使用以下路由配置:

"{controller}/{action}"

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

因为您使用的是默认路线。你宣布了哪些路线?谢谢你,因为现在我明白了为什么它没有生成明确的url。谢谢你,伙计,答案和@ppetrov一样,他在前面回答。很遗憾,我不能把这两个都标为答案,不知道为什么。