我怀疑有人会称之为重复......我已经查看了我看过的示例,并尝试实施建议的更改,但我仍然遇到此问题。在我的索引视图中,我有一个ActionLink HTML Helper来重定向到Edit。当我将鼠标悬停在它上面时,它会将URL目标显示为:
http://localhost:58028/Instruments/Edit?InstrumentId=1
而不是所需的
http://localhost:58028/Instruments/Edit/1
我已经建立了一个"用于比较"脚手架的情况,在我看来,我正在做同样的事情,但它产生了正确的URL。当我在控制器的Edit例程中调试并停止时,它向我显示它正在使用正确(且唯一)的映射。
有人可以告诉我我错过了什么:
这是我的观看代码:
<td>@Html.ActionLink(item.Description, "Edit", new { InstrumentId = item.InstrumentId })</td>
这是我的控制器代码:
public ActionResult Edit(int? InstrumentId)
这是我的路线:
public static void RegisterRoutes(RouteCollection routes)
{
//routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
答案 0 :(得分:1)
您的默认路由需要一个名为id
的参数,因此要使用默认路由,请将链接更改为
@Html.ActionLink(item.Description, "Edit", new { id = item.InstrumentId })
以及
的方法public ActionResult Edit(int? id)
或为您的方法创建一个特定路由,其中包含名为InstrumentId
的参数的占位符,并将其放在默认路由之前
routes.MapRoute(
name: "InstrumentEdit",
url: "Instruments/Edit/InstrumentId",
defaults: new { controller = "Instruments", action = "Edit" }
);
routes.MapRoute(
name: "Default",
....
两个选项都会生成../Instruments/Edit/1
答案 1 :(得分:0)
尝试将Html Helper更改为此
@Html.ActionLink(item.Description, "Edit", new { id = item.InstrumentId })