0

在视图中

@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 没有按预期的方式生成?谢谢。

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

4

2 回答 2

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 }
);

{id}如果您期望这样的 url 模式,请摆脱:

routes.MapRoute(
    "Default",
    "{controller}/{action}",
    new { controller = "Home", action = "Index" }
);
于 2013-05-15T15:02:32.493 回答
5

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

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

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

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

"{controller}/{action}"

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

于 2013-05-15T15:04:43.623 回答