Blazor是否支持条件性开闭标签?如何避免代码重复实现组件嵌套?
解决Blazor Server条件嵌套容器避免代码重复的方法
Blazor编译器要求组件标签必须完整闭合,所以你拆分<ContainerTag>的写法肯定无法通过编译。不想重复编写MyControl代码的话,有两种实用方案:
方案一:封装通用条件容器组件
自己实现一个可复用的ConditionalContainer组件,通过参数控制是否渲染外层容器:
ConditionalContainer.razor 代码
@if (ShouldWrap) { <ContainerTag> @ChildContent </ContainerTag> } else { @ChildContent } @code { [Parameter] public bool ShouldWrap { get; set; } [Parameter] public RenderFragment ChildContent { get; set; } }
页面中使用
<ConditionalContainer ShouldWrap="@DoOpenTag"> <MyControl /> </ConditionalContainer>
MyControl只需要写一次,通过ShouldWrap参数控制是否用ContainerTag包裹,彻底避免代码重复,还能在多个页面复用这个通用组件。
方案二:用RenderFragment封装重复内容
如果只是单个页面需要这种逻辑,也可以直接在页面里用RenderFragment抽离重复内容:
@{ RenderFragment content = @<MyControl />; } @if (DoOpenTag) { <ContainerTag>@content</ContainerTag> } else { @content }
把MyControl赋值给一个RenderFragment变量,之后在分支逻辑里直接引用该变量,同样只需要编写一次内容代码。
内容的提问来源于stack exchange,提问作者neggenbe
相关产品推荐
相关产品推荐

