Можно ли создать ссылку на компонент Razor без жесткого кодирования его URL-адреса?

Я пытаюсь создать сайт страниц github с новым Blazor WASM. Я использую 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? Или даже используя обычную ссылку (я проверил и a, и NavLink) с функцией, похожей на nameOf () или getType ()?

Мой лучший вариант прямо сейчас - добавить свойство URL в базу, но похоже, что мне не нужно вводить / образец дважды. (Это не сложно, это принцип!)

Я также видел несколько примеров, когда люди вводили NavigationManager, а затем использовали его для вывода URL-адреса, но это также нужно было повторять для каждой страницы. Я видел несколько примеров, в которых директива страницы была получена из RouteData.Values ​​, но это были страницы Razor. Я не мог понять, как создать объект RouteData или использовать его как статический класс.


person LEJ    schedule 25.08.2020    source источник


Ответы (1)


Вы можете использовать класс RouteAttribute, чтобы найти маршрут. Это выглядит так:

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

См. Как прочитать атрибут в классе во время выполнения?

person Remi THOMAS    schedule 28.08.2020