首页 > 解决方案 > 您可以链接到 Razor 组件而不对其 URL 进行硬编码吗?

问题描述

我正在尝试使用新的 Blazor WASM 创建一个 github pages 网站。我几乎每天都在工作中使用 C#,但我以前从未使用过 Blazor/Razor/ASP.NET,所以我很可能尝试使用在此处不起作用的服务器端技术。

我有一组页面,我想在主页上显示每个页面的小预览,并带有指向该页面的链接。所有这些页面都实现了相同的组件基类。例如,Sample.razor可能看起来像

@page "/sample"
@inherits GroupBase

<!-- html here -->
@code {
    public override string Name { get; } = "Sample";
}

Index.razor可能看起来像

@page "/"

@foreach (GroupBase p in mPagesToPreview)
    {
        <a href="   ">@p.Name</a>
    }
@code {
    List<GroupBase> mPagesToPreview = new List<GroupBase> { new Sample() };
}

有没有办法在不明确输入“/sample”的情况下路由到示例页面?或者甚至使用类似于nameOf()getType()的功能的普通链接(我已经检查了aNavLink ) ?

我现在最好的选择是向基础添加一个URL属性,但似乎我不应该输入两次“/sample”。(这并不难;这是事情的原理!)

我还看到了一些人注入NavigationManager然后使用它来推断 URL 的示例,但是对于每个页面也必须重复此操作。我看过一些从RouteData.Values获取页面指令的示例,但这些是 Razor 页面。我不知道如何创建RouteData对象或将其用作静态类。

标签: c#asp.net-mvcblazorwebassemblyblazor-webassembly

解决方案


您可以使用类 RouteAttribute 来查找路线。它看起来像这样:

[Microsoft.AspNetCore.Components.RouteAttribute("/counter")]
public partial class Counter : Microsoft.AspNetCore.Components.ComponentBase

请参阅如何在运行时读取类的属性?


推荐阅读