URL.Action includes id when constructing URL

流过昼夜 提交于 2019-11-28 23:04:25

I'm guessing in your routing, you're not specifying that id is an optional parameter. Here's the default route in a sample project.

routes.MapRoute(
  "Default", // Route name
  "{controller}/{action}/{id}", // URL with parameters
  new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Parameter defaults
);

Note the inclusion of id = UrlParameter.Optional. Without that, you'd get the behavior you're describing because it thinks the id is mandatory.

On a side note, if your Show action doesn't always have an id then it should be nullable or provide a default.

public ActionResult Show(int? id)
public ActionResult Show(int id = 0)

Otherwise you'll get an error when you try loading the url without the id parameter.

Just came across the same problem and so you know, you can also just use an empty string:

@Url.Action("Show", "Course", new { id = "" })
borigas

I know this is old, but I found this first, but didn't like any of these solutions, so I kept looking and found https://stackoverflow.com/a/19110921/1130636.

You can use UrlParameter.Optional to solve this problem

Url.Action("Show", "Course", new { id = UrlParameter.Optional })

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!