如何从 HTML 帮助程序操作链接而不是查询字符串获取标准的预期控制器操作 ID



我怀疑有人会称其为重复项......我已经浏览了我看到的示例并尝试实施建议的更改,但我仍然遇到这个问题。 在我的索引视图中,我有一个操作链接 HTML 帮助程序可以重定向到编辑。 当我将鼠标悬停在它上面时,它将 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 }
);
}

默认路由需要一个名为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

尝试将 Html 助手更改为此

@Html.ActionLink(item.Description, "Edit", new { id = item.InstrumentId })

最新更新