如何有条件地添加Blazor组件的模板?

时间:2020-03-13 14:38:05

标签: c# blazor asp.net-blazor

我正在使用接收模板的第三方blazor组件,但是我正在为该组件制作一个包装,该包装还将具有template属性。

如果有人将我的包装器与模板一起使用,则它应该通过模板,但如果没有,则应使用组件的默认模板。

我尝试添加一个if,但是它不起作用

const recCloud = clouds => {
    return clouds.length < 4 ? 1 : 1 + recCloud(clouds.slice(clouds[2] == 0 ? 2 : 1));
};

这给我一个错误

组件'TelerikDropDownList'中无法识别的子内容。组件“ TelerikDropDownList”通过以下顶级项接受子内容:“ ValueTemplate”,“ HeaderTemplate”,“ FooterTemplate”,“ ItemTemplate”

但是如果我在@if (ItemTemplate != null) <ItemTemplate Context="Data"> @ItemTemplate(Data) </ItemTemplate> } 内添加If,

ItemTemplate

它不会呈现任何内容,因为模板内容为空。

如何有条件地添加<ItemTemplate Context="Data"> @if (ItemTemplate != null) { @ItemTemplate(Data) } </ItemTemplate> 或使用组件ItemTemplate的默认值?

观察:我正在使用Telerik,但是这个问题对于任何带有模板的组件应该都是通用的

1 个答案:

答案 0 :(得分:5)

考虑将检查移出组件声明。 这是一个例子。假设您有两个部分:InnerComponentWrapperComponent。您的代码在WrapperComponent中应如下所示:

@if(CustomTemplate == null)
{
   <InnerComponent />
}
else
{
    <InnerComponent>
        <ItemTemplate>@ItemTemplate</ItemTemplate>
    </InnerComponent>
}