我正在编写一个新的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 })
标记帮助程序正确生成以下网址:
HTML帮助器生成以下内容:
注意:链接位于带有URL的页面上: https://localhost:44308/MenuItems/Details/c469f993-9cac-4adc-bf63-2aba9be249c9
总而言之,我做错了什么吗?还是这似乎是ASP网络核心Html.ActionLink方法中的错误?
答案 0 :(得分:2)
Html.ActionLink
用于MVC模式,它需要操作和控制器名称。由于您使用的是剃须刀页面,因此该页面将不起作用,因为您没有控制器和动作,但您拥有页面!因此,您的第一种方法是正确的。
或者,您也可以使用Url.Page
生成如下链接:
<a href="@(Url.Page("./DeleteIngredient", null, new { MenuItemId = item.MenuItemId, IngredientId = item.IngredientId })">Delete</a>