首页 > 解决方案 > Blazor 页面:如何使用 BuildRenderTree 添加动态内容

问题描述

背景:我们为客户运行了几十个网站;都使用相同的代码库(ASP.NET WebForms),但设计完全不同。页面结构是从 SQL Server 元数据以编程方式生成的,使用诸如Panel添加到 ASP.NET 页面Controls集合中的控件,并DIVs在呈现的 HTML 中生成。

目标:我们希望最终迁移到 ASP.NET CORE。但是,似乎没有等效于页面的控件集合。我能找到的最接近的东西是添加 Blazor 组件的 RenderTreeBuilder。

问题:是否可以BuildRenderTree添加一个包含我们自制 HTML 的组件(例如,包含 和 之间的所有<body>内容</body>

我读过以下文章:

https://chrissinty.com/building-components-via-rendertreebuilder/

https://docs.microsoft.com/en-us/aspnet/core/blazor/components?view=aspnetcore-3.1#manual-rendertreebuilder-logic

...并尝试添加 HTML 元素,但它非常麻烦,我想以编程方式为几乎整个页面生成 HTML,并将其添加为一个RenderFragment(这是正确的术语吗?)。

这可能吗?有替代方案吗?

编辑:


@Henk 的答案,使用MarkupString结构和我的,RenderTreeBuilder.AddMarkupContent在所需的工作量和管道方面似乎相似。

我应该考虑的两种方法有什么优缺点吗?

标签: asp.netasp.net-coreblazor-server-sidedynamic-html

解决方案


如果你只想要 HTML(普通的,死的),那么你不需要渲染树:

<h1>My Page</h1>
@MyHtmlComposer()

@code{
    private MarkupString MyHtmlComposer()
    {
        string html = "<p>Hello</p>";
        return new MarkupString(html);
    }
}

推荐阅读