Есть ли способ для компонента Blazor прочитать свой атрибут класса страницы контейнера? - PullRequest
0 голосов
/ 30 апреля 2020

Я знаю, есть CascadedParameter с, но для работы им требуется CascadingValue с.

ОК, предыдущее описание проблемы было расплывчатым. Так что здесь проще.

Представьте себе страницу Blazor:

@page "/"
@attribute [Authorize, NavMenu(1, "My first page", "view_module", HeaderText = "Hello!")]

<MyCommonPageHeader/>

Почему атрибут NavMenu? Я придумал, это некоторые метаданные, которые позволяют мне создавать навигационное меню со ссылкой на каждую настроенную страницу.

Моя цель - создать компонент MyCommonPageHeader, чтобы прочитать пользовательский атрибут (NavMenuAttribute) и использовать его для отображения заголовка на странице.

Я уже сделал это следующим образом:

@page "/"
@attribute [Authorize, NavMenu(1, "My first page", "view_module", HeaderText = "Hello!")]

<MyCommonPageHeader Page="this"/>

Мне просто нужно передать this каждому экземпляру моего компонента , Я просто хочу убедиться, что здесь нет ярлыка, и нет другого пути для компонента добраться до класса содержащей страницы.

Кстати, вот источник NavMenuAttribute, если вам интересно:

using Microsoft.AspNetCore.Components;
using System;
using System.Reflection;

namespace Woof.Blazor {

    public class NavMenuAttribute : Attribute {

        public string DisplayName { get; set; }

        public string HeaderText { get; set; }

        public int Order { get; set; }

        public string Icon { get; set; }

        public bool IsEnabled { get; set; } = true;

        public NavMenuAttribute(int order, string displayName, string icon) {
            Order = order;
            DisplayName = displayName;
            Icon = icon;
        }

    }

}

Просто метаданные. Ничего больше. Я описываю страницу в строке атрибута, теперь все остальное в моем приложении использует это описание, поэтому мне не нужно повторять что-либо более одного раза.

...