gpt4 book ai didi

c# - Blazor:未设置基类的 Razor 组件继承参数

转载 作者:行者123 更新时间:2023-12-04 10:34:21 24 4
gpt4 key购买 nike

我的一个 Razor 组件库出现问题。

我的组件有一个抽象基类RazorHtmlComponent,带有参数属性[Parameter] public string InlineClass { get;放; } 用于将 css 类映射到实际组件。然后我为每个组件提供了另一个基类,其中包含组件特定的属性,其定义如下:abstract class BaseRazorButton: RazorHtmlComponent

我的组件,在此示例中 RazorButton.razor 继承自抽象按钮基类 BaseRazorButton

问题是,当我实例化一个 Razor 按钮并将属性 InlineClass 设置为任何值时,它在我的实际 RazorButton 实例中保持为 null。

为了更好地理解,这里有一个最小的代码示例:

基类:

public abstract class RazorHtmlComponent : ComponentBase, IRazorHtmlComponent
{
[Parameter] public string InlineClass { get; set; }

public DomDefinitionMapper ClassMapper { get; }

...

protected RazorHtmlComponent()
{
ClassMapper = new DomDefinitionMapper(InlineClass);
}

Dom 定义映射器:

  public class DomDefinitionMapper
{
public List<Func<string>> DefinitionRepository { get; } = new List<Func<string>>();

public DomDefinitionMapper(string definition = "")
{
if (!string.IsNullOrEmpty(definition))
{
DefinitionRepository.Add(() => definition);
}
}

public string GetDefinitions(char separator = default)
=> separator.Equals(default) ?
string.Join(" ", DefinitionRepository.Select(i => i()).Where(i => i != null))
: string.Join($" {separator}", DefinitionRepository.Select(i => i()).Where(i => i != null));
}

按钮基类:

public abstract class BaseRazorButton: RazorHtmlComponent
{
...
}

Razor 按钮组件:

@inherits BaseRazorButton

<button class="@ClassMapper.GetDefinitions()">
@Text
</button>

Razor 按钮的实例化:

<RazorButton InlineClass="page" 
Text="1"/>

当我在浏览器中检查时,未设置使用 InlineClass 参数定义的类“页面”。在 Debug模式下,ClassMapper DefinitionRepository 不包含该类。

我错过了什么吗?我只是不明白为什么它不起作用:/

最佳答案

如果你在构造函数中调用它:

[Parameter] public string InlineClass { get; set; }
...
protected RazorHtmlComponent()
{
ClassMapper = new DomDefinitionMapper(InlineClass);
}

参数尚未设置。它将在调用 OnInitializedOnInitializedAsync 时发生。
并且您的 RazorHtmlComponent 必须派生自 ComponentBase

public abstract class RazorHtmlComponent : ComponentBase, IRazorHtmlComponent
{
[Parameter] public string InlineClass { get; set; }

public DomDefinitionMapper ClassMapper { get; }

...

protected override void OnInitialized()
{
ClassMapper = new DomDefinitionMapper(InlineClass);
}

关于c# - Blazor:未设置基类的 Razor 组件继承参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60260358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com