这是ASP网络核心ActionLink HTML帮助程序的错误吗?

时间:2019-09-04 18:18:06

标签: c# asp.net-core razor-pages actionlink tag-helpers

我正在编写一个新的Razor Pages应用程序(这是我第一次使用Razor Pages,而不是MVC),但是到了要创建一个链接的地步,我一生都无法弄清楚为什么即使我尝试想到的ActionLink方法的每个参数变体也无法正常工作。然后,我改为使用Anchor Tag Helper方法来使用确切的smae参数,并且效果很好。 脚手架视图时我已经很困惑,因为代码生成同时使用了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 })

标记帮助程序正确生成以下网址:

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

注意:链接位于带有URL的页面上: https://localhost:44308/MenuItems/Details/c469f993-9cac-4adc-bf63-2aba9be249c9

总而言之,我做错了什么吗?还是这似乎是ASP网络核心Html.ActionLink方法中的错误?

1 个答案:

答案 0 :(得分:2)

Html.ActionLink用于MVC模式,它需要操作和控制器名称。由于您使用的是剃须刀页面,因此该页面将不起作用,因为您没有控制器和动作,但您拥有页面!因此,您的第一种方法是正确的。

或者,您也可以使用Url.Page生成如下链接:

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