【发布时间】:2018-12-02 17:10:25
【问题描述】:
我正在学习 Blazor。 https://learn-blazor.com/
通过覆盖BlazorComponent 类的BuildRenderTree(RenderTreeBuilder builder) 方法,我在C# 中创建组件时遇到了一些困难。
这是我的课:
public class TestComponent : BlazorComponent
{
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
builder.OpenElement(1, "p");
builder.OpenElement(2, "strong");
builder.AddContent(3, "hello");
builder.CloseElement();
builder.CloseElement();
base.BuildRenderTree(builder); // With or without this line it doesn't work
}
}
我在我的页面中这样使用它:
<TestComponent></TestComponent>
我已经在最后一行base.BuildRenderTree(builder); 的情况下对其进行了测试,但无论哪种方式它都不会呈现。我让组件变得非常简单(只有一个段落标签、一个强标签和一个内容),所以我不知道为什么它不会呈现。代码构建得很好。
谁能看看我做错了什么?
【问题讨论】:
-
出于好奇,您为什么要尝试以这种方式构建您的 blazor 组件,而不是通过您的
.cshtml文件惯用地构建它? -
部分只是为了了解它在某些情况下总是会派上用场。
-
部分原因是我可以开始为我未来的项目创建一个可重用的 Blazor 组件库。一旦我得到这个简单的例子,我希望创建更复杂的使用 RenderFragment 属性的例子,允许我或其他开发人员指定他们自己的 HTML,这些 HTML 可以作为控件的一部分呈现。
-
+1 仅学习如何做事以及如何工作。但话虽如此,我认为使用渲染片段创建可重用组件不需要这种方法。我在我的项目中编写了几个组件,这些组件完全通过
.cshtml定义,但通过RenderFragment属性填充其内容。 IMO,这种方法更容易使用,这就是我提出问题的原因。 -
我正在开发类似 UsernameValidator 组件的东西,它基于 AsyncValidator 抽象组件,可以这样使用:
检查您的用户名尚未注册... 哦不!该名称已注册。选择另一个,或者您是要登录 ? 完美!