Blazor 渲染片段子内容只允许某些组件?

Blazor Render Fragment Child Content to allow only certain components?

是否可以限制组件的RenderFragment Child Content 只允许某些组件? 例如

<MyParentComponent>
 <Children>
  <AcceptedChild/>
  <InvalidChild/> <-- throw err since it shouldn't be accepted
 </Children>
</MyParentComponent>

编辑:

<DataGrid>
 <DataGridColumns>
  <DataGridColumn/>
  <DataGridColumn/>
  <NotADataGridColumn/> <--- throw error
 </DataGridColumns>
</DataGrid>

如果您的组件包含两个或更多 RenderFragment 参数,您可以在使用您的组件时限制直接子项的有效选择。

例如如果您的组件 MyComponent 具有以下参数:

[Parameter]
public RenderFragment FirstChild { get; set; }

[Parameter]
public RenderFragment SecondChild { get; set; }

然后您尝试按如下方式使用它:

<MyComponent>
    <FirstChild />
    <SecondChild />
    <ThirdChild />
</MyComponent>

<ThirdChild /> 会抛出错误:

RZ9996 Unrecognized child content inside component 'MyComponent'. The component 'MyComponent' accepts child content through the following top-level items: 'MyFirstChildComponent', 'MySecondChildComponent'.


您的示例中的等价物是 Children 例如包含参数 RenderFragment AcceptedChildRenderFragment AcceptedChild2,但没有 RenderFragment InvalidChild.

Is it possible to restrict the RenderFragment Child Content of a component to only allow certain components?

没有

A RenderFragment 是委托人。在您的示例中,分配给 DataGridColumnsRenderFragment 属于父级 page/component,而不是 DataGrid,并且在渲染器的父级上下文中是 运行。 DataGrid 只“知道”它是一个符合 RenderFragment 模式的委托。它无法访问内部代码,因此无法知道它包含什么。