将字符串转换为 RenderFragment

bug*_*uga 6 blazor

我想知道是否有推荐的方法在代码中将字符串转换为 RenderFragment。现在我正在这样做:

RenderFragment fragm = @<text>@myString</text>;
Run Code Online (Sandbox Code Playgroud)

但我不知道这是否是最好的方法

MrC*_*tis 9

据我所知,没有“推荐”方法。

ARenderFragment是一个委托,定义为:

public delegate void RenderFragment(RenderTreeBuilder builder);
Run Code Online (Sandbox Code Playgroud)

Renderer它是传递给实际呈现组件标记的代码块。

这是一个演示页面,显示了定义一种方法的三种方法:

@page "/"

<PageTitle>Index</PageTitle>

<h1>Hello, world!</h1>

<div class="p-2">
    @RF1
</div>
<div class="p-2">
    @RF2
</div>
<div class="p-2">
    @RF3
</div>

@code {
    //need to be careful with the builder name not to clash with one the names used by the Razor compiler
    private RenderFragment RF1 => (mybuilder) =>
        {
        <text>@myString</text>
        };

    private RenderFragment RF2 => (builder) =>
        {
            builder.AddMarkupContent(0, $"<text>{myString}</text>");
        };

    // DO NOT use an loop incrementer for the sequence number
    private RenderFragment RF3 => (builder) =>
        {
            builder.OpenElement(0, "text");
            builder.AddContent(1, myString);
            builder.CloseElement();
        };

    private string myString = "Hello Blazor";
}
Run Code Online (Sandbox Code Playgroud)

第一个有点违反直觉。它仅适用于 Razor 组件文件,因为 Razor 编译器可以识别它并将其编译为类似于第二个示例的代码块。