Я знаю, есть 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;
}
}
}
Просто метаданные. Ничего больше. Я описываю страницу в строке атрибута, теперь все остальное в моем приложении использует это описание, поэтому мне не нужно повторять что-либо более одного раза.