【问题标题】:Use a @typeparam as component in Blazor在 Blazor 中使用 @typeparam 作为组件
【发布时间】:2021-05-17 08:11:55
【问题描述】:

是否可以使用@typeparam 作为组件? 更明确地说,执行以下操作 MyComponent.razor:

@typeparam TComponent

<TComponent />

当然,还有一个MyComponent.razor.cs文件,其内容是:

public partial MyComponent<TComponent> : ComponentBase where TComponent : ComponentBase

以便编译器知道&lt;TComponent /&gt; 是有意义的。

我在 Microsoft 文档中找不到任何相关文档。

当我尝试时它似乎可以编译,但显示以下警告:

warning RZ10012: Found markup element with unexpected name 'TComponent'. If this is intended to be a component, add a @using directive for its namespace

但这只是一个警告而不是错误。但它并没有在浏览器中显示任何内容。

我正在使用 ASP.NET 5。

谢谢

【问题讨论】:

  • 您的问题是关于将泛型用于 Blazor 内容。不确定这是否已经实施。但是您是否将this 视为动态内容的一种方式?不一样,但也许能给你一些想法。

标签: asp.net-core .net-core razor blazor type-parameter


【解决方案1】:

不太确定你想要做什么,但你可以写出我认为你想要实现的组件类,如下所示:

using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Rendering;

namespace BlazorTest.Pages
{
    public class ComponentRenderer<TComponent> : ComponentBase where TComponent : IComponent
    {
        protected override void BuildRenderTree(RenderTreeBuilder builder)
        {
            builder.OpenComponent<TComponent>(1);
            builder.CloseComponent();
        }
    }
}

因此,在 Index.razor 中,您可以执行以下操作来呈现 FetchData 类型的组件:

....
<ComponentRenderer TComponent="FetchData"></ComponentRenderer>
....

如果我不太了解,请发布更多信息。

【讨论】:

  • 所以基本上,我一直在寻找一种“本机”的方式来做这件事,但是你为我提供了一种快速而优雅的方式,所以我会尝试一下如果它按预期工作,非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
  • 2020-07-08
  • 2020-10-31
  • 2022-01-05
  • 2020-06-09
  • 1970-01-01
相关资源
最近更新 更多