在 C# Blazor 中的部分类中初始化 RenderFragment

3

我正在使用一个来自第三方包的组件,它接受RenderFragment作为参数,并且我想通过我的Index页面的Partial Class为该RenderFragment分配一个值。

我发现当我在 code 标签中构建RenderFragment时,它可以工作。 但是一旦将其放入 partial class 中,Visual Studio就开始标记错误。

可工作的示例代码:

Razor文件:

<Statistic Title="Feedback" Value="1128" PrefixTemplate="@prefix1" /> 

@code { 
    public RenderFragment prefix1 = @(<Icon Type = "like" />);
} 

无法正常工作的示例代码:

Razor文件:

<Statistic Title="Feedback" Value="1128" PrefixTemplate="@prefix1" />

局部类:

public partial class Index {
    RenderFragment prefix1 = @(<Icon Type = "like" />);
}

我的问题是,如何在部分类中构建渲染片段? 我似乎在网上找不到有关这个主题的任何信息。 提前致谢。

1
你可以使用RenderTreeBuilder,或者坚持在Razor文件中完成它。 - Mister Magoo
谢谢您的评论。我考虑使用RenderTreeBuilder,但我认为它非常冗长且容易出错。难道没有其他选择吗? - Xander Selorm
不,我更喜欢个人在Razor文件中定义RenderFragments - 毕竟它们是标记语言。 - Mister Magoo
哦,好的。非常感谢你。你帮了我很大的忙! - Xander Selorm
1
我不会就编程风格给别人建议,但我可以说这是完全可能的。 - Mister Magoo
显示剩余2条评论
1个回答

7

根据Mister Magoo的建议,我选择了RenderTreeBuilder,并且希望将业务逻辑与UI分离,这就是我的做法:

Razor文件:

<Statistic Title="Feedback" Value="1128" PrefixTemplate="@prefix1" />

部分类:

public partial class OperationCard
{
    RenderFragment prefix1 = builder =>
    {
        builder.OpenComponent<Icon>(1);
        builder.AddAttribute(2, "Type", "like");
        builder.CloseComponent();
    };
}

2
这里最重要的理解是RenderFragment不是一个字符串或一段HTML代码块,而是一个代理。任何实现模式void method(RenderTreeBuilder builder)的方法都可以分配给RenderFragment属性或字段。 - MrC aka Shaun Curtis
哦,好的,这很有见地。谢谢你。 - Xander Selorm

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