ASP.NET Core 5 AnchorTagHelper 无法在 razor 页面上运行

ASP.NET Core 5 AnchorTagHelper not working on razor page

我的 Razor _layout.cshtml 页面中有一个简单的锚标记助手;但是没有 url 出现在第一个上,而是出现在第二个上。

asp-for 属性从一个简单的 const 字符串中提取值,两个标签助手都从同一个地方获取它。

public static class PageNavigation
{
    public const string Manage = "/account/manage";
    public const string Logout = "/account/logout";
}

_layout.cshtml 页面中的标记助手:

<a asp-page="@PageNavigation.Manage" class="dropdown-item notify-item">
    <i class="mdi mdi-account-circle mr-1"></i>
    <span>My Account</span>
</a>

<a asp-page="@PageNavigation.Logout" class="dropdown-item notify-item">
    <i class="mdi mdi-account-circle mr-1"></i>
    <span>Logout</span>
</a>

输出:

<a class="dropdown-item notify-item" href="">
    <i class="mdi mdi-account-circle mr-1"></i>
    <span>My Account</span>
</a>
<a class="dropdown-item notify-item" href="/account/logout/">
    <i class="mdi mdi-logout mr-1"></i>
    <span>Logout</span>
</a>

可以看到,第一个标签没有href属性值;这有点奇怪,我无法弄清楚为什么,不幸的是我无法轻松调试到 AnchorTagHelper 本机源,我最终只在输出编写器 类 而不是实际的标签助手源中。

编辑:

进一步的编辑表明我似乎无法以这种方式输出任何东西,只能输出一个锚标记助手......无论创建多少,以任何顺序,只有“注销”一个正确显示。

我要让它工作的唯一方法是使用带有 href 属性的普通锚标记。

在一个单独的点上;这让我想知道 Anchor Tag 助手对于 Razor 页面有什么意义。您不能以强类型方式将其映射到特定的 Razor 页面,即使使用 'route' 属性,它也是一种非常冗长的方式,只是像正常一样添加锚标记。

请参阅此处的注释 3:https://www.learnrazorpages.com/razor-pages/tag-helpers/anchor-tag-helper

asp-page 属性需要不带扩展名的 文件 的路径,而不是文件夹的路径。

public static class PageNavigation
{
    public const string Manage = "/account/manage/index";
    public const string Logout = "/account/logout";
}

编辑 - 在您单独的一点上,给定正确页面名称的锚标记助手将为该页面生成正确的 URL,这可能不一定与其文件路径匹配。