将字符串转换为RenderFragment

5

我想知道在代码中将字符串转换为RenderFragment的推荐方法。

现在我正在这样做:

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

但我不确定这是否是最佳实践。


3
你可能已经阅读了关于 wig-pig 语法 的内容(往下滚动页面...)@:@{在此处放置一些代码} - Shnugo
这是一种不错的创建RenderFragment的方式,但为什么要这样做呢?您可以在使用片段的任何地方使用字符串-我看不出有任何好处。 - Mister Magoo
1个回答

8

我不知道是否有“推荐”的方法。

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编译器会将其识别并编译成类似第二个示例的代码块。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接