在 Blazor 中创建子页面的 href

Create href to subpage in Blazor

我的页面有这个指令 @page "/sales/reports" 所以它加载在 https://localhost/sales/reports 路由。

我想创建 link <a href="">Report 1</a> 将指向一个子页面 /sales/reports/{id} - 例如 https://localhost/sales/reports/8c5b8c1c-12b5-43ee-92c9-8d3bcb8644a4 但不确定我在 href 中放了什么我的锚当我简单地把 <a href="@myGuid">Report 1</a> link 有一个 https://localhost/8c5b8c1c-12b5-43ee-92c9-8d3bcb8644a4 的形式。我需要硬编码 <a href="sales/reports/@myGuid">Report 1</a> 还是有更聪明的方法?

'subpage' 一词并不存在。

只有 'pages' 而他们有 'routes'。有时路线会出现嵌套,如您的示例所示,但这并不会使它成为 'subpage'.

你的问题的答案是,是的,你需要包括你想去的 'page' 的路线。

<a href=@($"sales/reports/{@myGuid}")>Report 1</a>

这并不一定意味着在页面本身中进行硬编码。您可以创建一个帮手 class 来为您完成这些工作。例如:

class ReportPathCreator
{
    public static string ReportRouteFor(Guid reportGuid) => $"sales/reports/{reportGuid}";
}

然后使用:

<a href=@(ReportPathCreator.ReportRouteFor(myGuid))>Report 1</a>

然后,如果您选择更改托管报告的路线,您只需在助手中进行更改 class,您网站中的所有锚点元素都会自动选择新路线。

更新

您还可以使用静态 class 生成模板供您使用,而不是 @page 指令:

class ReportPathCreator
{
    public static string ReportRouteFor(Guid reportGuid) => $"sales/reports/{reportGuid}";

    public static string ReportTemplate = "sales/reports/{reportGuid:guid}";
}

然后,不使用@page 指令,而是使用:

@attribute [Route(ReportPathCreator.ReportTemplate)]