首页 > 解决方案 > Blazor 组件有没有办法读取其容器页面类属性?

问题描述

我知道,有CascadedParameters,但它们需要CascadingValues 才能工作。

好的,之前对问题的描述很模糊。所以这里更简单。

想象一个 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;
        }

    }

}

只是元数据。没有其他的。我在属性行中描述页面,现在我的应用程序中的所有其他内容都使用此描述,因此我不必重复任何内容。

标签: blazorblazor-server-side

解决方案


推荐阅读