URL.Action()包括路由值

我有一个ASP.Net MVC 4应用程序,并使用Url.Action这样的帮手: @Url.Action("Information", "Admin")

此页面用于添加新的和编辑pipe理员configuration文件。 url如下:

  Adding a new: http://localhost:4935/Admin/Information Editing Existing: http://localhost:4935/Admin/Information/5 <==Admin ID 

当我在网站的Editing Existing部分,并决定我想添加一个新的pipe理员,我点击以下链接:

  <a href="@Url.Action("Information", "Admin")">Add an Admin</a> 

但是,上面的链接实际上是http://localhost:4935/Admin/Information/5 。 只有当我在该页面中编辑现有的pipe理员时才会发生这种情况。 在网站上的任何地方,它都正确地链接到http://localhost:4935/Admin/Information

有没有人看过这个?

更新:

RouteConfig:

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

在mvc中根据当前路由模式生成的外发URL。

因为你的信息动作方法需要id参数,而你的路由集合有你当前请求的url(/ Admin / Information / 5)的id,id参数是从现有路由集合值中自动获得的。

要解决这个问题,你应该使用UrlParameter.Optional:

  <a href="@Url.Action("Information", "Admin", new { id = UrlParameter.Optional })">Add an Admin</a> 

你也可以使用这种forms:

<a href="@Url.Action("Information", "Admin", null)"> Admin</a>