这是 asp net core ActionLink Html 助手的错误吗?

Is this a bug with the asp net core ActionLink Html helper?

我正在编写一个新的 Razor Pages 应用程序(这是我第一次使用 Razor 页面而不是 MVC),我到了需要创建一个 link 并且终生我无法弄清楚为什么它不起作用,即使我尝试了我能想到的 ActionLink 方法的每一个参数变体。然后,我改为使用具有精确 smae 参数的 Anchor Tag Helper 方法,并且效果很好。 当我构建我的观点时,我已经感到困惑,因为代码生成同时使用了 Tag Helpers 和 Html Helpers,正如我的大脑告诉我的那样,你应该真正选择一个或另一个并尽可能保持一致。

cshtml文件中的代码如下:

<a asp-page="./DeleteIngredient" asp-route-MenuItemId="@item.MenuItemId" asp-route-IngredientId="@item.IngredientId">Delete</a>

@Html.ActionLink("Delete", "DeleteIngredient", new { MenuItemId = @item.MenuItemId, IngredientId = @item.IngredientId })
@Html.ActionLink("Delete", "./DeleteIngredient", new { MenuItemId = @item.MenuItemId, IngredientId = @item.IngredientId })

Tag Helper 正确生成以下 url:

https://localhost:44308/MenuItems/DeleteIngredient?MenuItemId=c469f993-9cac-4adc-bf63-2aba9be249c9&IngredientId=2f2863b1-27f4-4c62-93d6-84f27acb98fd

Html 助手生成以下内容:

https://localhost:44308/MenuItems/Details/c469f993-9cac-4adc-bf63-2aba9be249c9?MenuItemId=c469f993-9cac-4adc-bf63-2aba9be249c9&IngredientId=2f2863b1-27f4-4c62-93d6-84f27acb98fd&action=DeleteIngredient

注意:link 与 URL 在一个页面上: https://localhost:44308/MenuItems/Details/c469f993-9cac-4adc-bf63-2aba9be249c9

综上所述,我做错了什么吗?或者这似乎是 asp 网络核心 Html.ActionLink 方法中的错误?

Html.ActionLink 用于 MVC 模式,它需要 Action 和 Controller 名称。由于您使用的是剃刀页面,因此它不会工作,因为您没有控制器和操作,但您有页面!所以,你的第一种做法是正确的。

作为替代方案,您可以使用 Url.Page 生成 link,如下所示:

<a href="@(Url.Page("./DeleteIngredient", null, new { MenuItemId = item.MenuItemId, IngredientId = item.IngredientId })">Delete</a>