您可以链接到Razor组件而无需对URL进行硬编码吗?

问题描述

我正在尝试使用新的Blazor WASM创建一个github页面网站。我几乎每天都在使用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”的情况下路由到 Sample 页面?或者甚至使用具有类似于 nameOf() getType的功能的普通链接(我已经检查了 a NavLink ) ()

目前,我最好的选择是在基础中添加一个 URL 属性,但看来我不必两次键入“ / sample”。 (这并不难;这是事物的原理!)

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

解决方法

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

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

请参见How do I read an attribute on a class at runtime?