问题描述
我的 Razor _layout.cshtml
页面中有一个简单的锚标记助手;然而,第一个没有出现网址,但在第二个。
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
属性的普通锚标记。
在一个单独的点上;这让我想知道锚标记助手对于 Razor 页面的意义何在。您无法以强类型方式将其映射到特定的 Razor 页面,即使使用“路由”属性,它也是一种像往常一样添加锚标记的冗长方式。
解决方法
请参阅此处的注释 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,该 URL 可能不一定与其文件路径匹配。