Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过重写BlazorComponent.BuildRenderTree(RenderTreeBuilder)创建组件_C#_.net_Blazor - Fatal编程技术网

C# 通过重写BlazorComponent.BuildRenderTree(RenderTreeBuilder)创建组件

C# 通过重写BlazorComponent.BuildRenderTree(RenderTreeBuilder)创建组件,c#,.net,blazor,C#,.net,Blazor,我在学Blazor。 通过重写BlazorComponent类的BuildRenderTree(RenderTreeBuilder)方法,我在C#中创建组件时遇到了一些困难 这是我的班级: public class TestComponent : BlazorComponent { protected override void BuildRenderTree(RenderTreeBuilder builder) { bui

我在学Blazor。

通过重写
BlazorComponent
类的
BuildRenderTree(RenderTreeBuilder)
方法,我在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。这是一个很好的网站,这家伙做了一个极好的工作。但遗憾的是,他至少在过去六个月里停止了更新。这些材料已经陈旧无用了。现在,我不知道有什么好的替代品

试试这个:

  • 放置
    base.BuildRenderTree(生成器)位于BuildRenderTree方法的开头,而不是结尾

  • 使用
    ComponentBase
    而不是
    BlazorComponent
    。。。 BlazorComponent已死亡

  • 始终以序列参数的值
    0
    开始

  • 出于好奇,为什么您要尝试以这种方式构建blazor组件,而不是通过
    .cshtml
    文件以惯用的方式进行构建?部分原因是为了了解它在某些情况下如何始终派上用场。部分原因是为了我可以开始为我未来的项目创建一个可重用blazor组件库。一旦这个简单的示例开始工作,我希望创建更复杂的使用RenderFragment属性的示例,允许我或其他开发人员指定他们自己的HTML,这些HTML可以作为控件的一部分呈现。+1学习如何操作以及如何工作。但也就是说,我认为使用渲染片段创建可重用组件不需要这种方法。我在项目中编写了几个组件,其中组件完全通过
    .cshtml
    定义,但通过
    RenderFragment
    属性填充其内容。在我看来,这种方法更容易使用,这就是我提出这个问题的原因。我正在研究一种类似UsernameValidator的组件,它基于AsyncValidator抽象组件,可能会被这样使用:检查你的用户名是否还没有注册。。。哦,不!这个名字是注册的。选择另一个,还是你想登录?完美的你好非常感谢您的快速响应和良好建议!你知道怎么做很容易吧?因此,我将base.BuilderRenderTree(builder)调用移到了子例程的开头。但是你说我应该继承的这个ComponentBase类呢?我在GitHub的源代码中找不到它。请在哪个程序集和命名空间中找到ComponentBase?有关BlazorComponent死亡的信息,请参见:+1。不幸的是,在教程网站上找不到与此相关的任何内容&qki,开始时组件对象的基类被称为BlazorComponent。。。随着时间的推移,它从BlazorComponent更改为ComponentBase,就像UriHelper更改为NavigationManager一样。随着框架的创建,Blazor中的许多对象都经历了名称更改和更多更改。。。当然,没有教程会告诉你这一点。教程是关于框架的当前状态,而不是关于框架开发的历史。