将字符串转换为RenderFragment

问题描述 投票:0回答:2

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

RenderFragment fragm = @<text>@myString</text>;

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

blazor
2个回答
10
投票

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

A

RenderFragment
是一个委托,定义为:

public delegate void RenderFragment(RenderTreeBuilder builder);

它是传递给

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";
}

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


0
投票

我发现 (MarkupString) 是我将 html 字符串显示为标记所需的转换。

© www.soinside.com 2019 - 2024. All rights reserved.