【发布时间】:2021-07-06 10:31:52
【问题描述】:
我有以下代码:
<div>
@if (Components != null && Components.Count != 0) {
foreach (ComponentBase child in Components) {
// Render the child component here
}
}
</div>
如何使用 RenderFragment 渲染子对象?子对象是一个模板组件,它继承了其他类(上面有 ComponentBase)。
问题是子对象已经设置了所有参数,所以我不想使用对象数据再次设置所有 RenderFragment 参数。
我在 foreach 循环中尝试过但没有奏效的方法:
foreach (ComponentBase child in Components) {
@child // <-- does render the class text
}
foreach (ComponentBase child in Components) {
<ComponentBase>@child</ComponentBase> // <-- error
}
foreach (ComponentBase child in Components) {
RenderFragment renderChild = (builder) => { builder.OpenComponent(0, child.GetType()); builder.CloseComponent(); };
@renderChild; // <-- I want to render the child object as this does nothing
}
【问题讨论】:
-
“问题是子对象已经设置了它的所有参数”——这听起来像是一个问题——Blazor 希望创建和初始化所有组件——并管理它们的参数。如果您实例化自己并填充参数,那么您正在破坏核心渲染系统。
-
将此示例视为包含特定组件的容器。因此,我没有使用
及其参数,而是有一个 ,它可以在列表中包含多个 ButtonComponents。这是某些 css 定位和设置主容器的绝对样式所必需的。 -
目前还不清楚你想要实现什么——而且你最后的评论并没有改变——你是通过代码创建组件的实例吗?
-
是的。我想以某种方式动态呈现这些实例
-
好的,不支持 - 您需要让 Blazor 创建组件的实例并跟踪参数。