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

时间:2013-05-15 14:56:03

标签: 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)
{
    ...
}

它生成了一个像

这样的网址

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

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

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

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

2 个答案:

答案 0 :(得分:5)

  

我希望actionlink生成一个类似于:http://<localhost>/controllername/actionname/?id=1&year=1

的网址

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

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

如果您期望这样的网址格式,请删除{id}

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

答案 1 :(得分:5)

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

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

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

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

"{controller}/{action}"

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