You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor返回RenderFragment提示'__builder'不存在于当前上下文怎么解决?

报错原因

你遇到的__builder不存在报错,是因为Razor编译器仅会对组件模板区域、以及Razor代码块中声明的RenderFragment做渲染树生成处理,你在@code块的C# Lambda表达式内直接写Razor标签的写法不会被编译器识别,无法自动生成构建渲染树的相关代码,因此抛出该错误。

可复用渲染逻辑的实现方案

方案1:Razor代码块中声明泛型RenderFragment(最推荐,轻量且支持Razor语法)

直接在@{ } Razor代码块中声明带参数的RenderFragment<T>,使用@<>语法包裹渲染内容,可直接在模板的循环、分支逻辑中调用:

<div>
    @RenderButton(1)
    @* 循环场景调用示例 *@
    @foreach (var num in Enumerable.Range(1, 10))
    {
        if (num % 2 == 0)
        {
            @RenderButton(num)
        }
    }
</div>

@{
    // 带int类型参数的渲染片段,可直接写Razor语法
    RenderFragment<int> RenderButton = (number) => @<button type="button">@number</button>;
}

方案2:@code块中手动调用RenderTreeBuilder API

如果需要把渲染逻辑写在@code的C#方法中,不使用Razor语法,手动拼接渲染树即可:

<div>
    @RenderButton(1)
</div>

@code {
    private RenderFragment RenderButton(int number)
    {        
        return builder =>
        {
            builder.OpenElement(0, "button");
            builder.AddAttribute(1, "type", "button");
            builder.AddContent(2, number);
            builder.CloseElement();
        };
    }
}

方案3:拆分为独立子组件

如果你的复用逻辑包含独立的状态管理、事件处理、复杂的参数校验,拆分为独立组件是更易维护的选择,适合复用逻辑复杂度较高的场景。

内容的提问来源于stack exchange,提问作者buga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:36:08