我有这样的代码;
@((MarkupString)$"<{item.Tagname}> {ChildContent} </{item.TagName}>")
中间的ChildContent是一个RenderFragment对象,但是它输出如下:
"Microsoft.AspNetCore.Components.RenderFragment">
有办法使它正常工作吗?
我猜你是想做这样的事情。
示例使用RenderTreeBuilder
来构造标记。这相当于为组件编写汇编程序,但随着标记变得复杂,这是唯一明智的方法!
如果你使用这个方法,一个建议:序列号需要手工编码,不要使用迭代器。
@this.content
@code {
[Parameter] public RenderFragment? ChildContent { get; set; }
[Parameter] public string TagName { get; set; } = "div";
private RenderFragment content => builder =>
{
builder.OpenElement(0, TagName);
builder.AddContent(1, ChildContent);
builder.CloseComponent();
};
}
或作为一个完整的组件:
public class ComponentClass : ComponentBase
{
[Parameter] public RenderFragment? ChildContent { get; set; }
[Parameter] public string TagName { get; set; } = "div";
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
builder.OpenElement(0, TagName);
builder.AddContent(1, ChildContent);
builder.CloseComponent();
}
}