在视图中
@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未按预期方式生成?谢谢。
更新: 现在我发现这是一个错字导致了我的这个问题,但下面的答案仍然足够好,因为它帮助我进一步了解路线的工作方式
答案 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
,您的所有参数都将被命名。