blazor return RenderFragment '__builder' 在当前上下文中不存在

Posted

技术标签:

【中文标题】blazor return RenderFragment \'__builder\' 在当前上下文中不存在【英文标题】:blazor return RenderFragment '__builder' does not exist in the current contextblazor return RenderFragment '__builder' 在当前上下文中不存在 【发布时间】:2022-01-02 20:23:38 【问题描述】:

我正在尝试从组件私有方法返回 RenderFragment, 但我收到编译错误:

'__builder' does not exist in the current context

这是显示问题的最少代码:

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

@code 
    private RenderFragment RenderButton(int number)
            
        return builder =>
        
            <button type="button">@number</button>
        ;
    

在我看来,这可能是不可能/不允许的,如果不是,有什么办法可以避免编写相同的渲染代码?假设我需要在多个循环中使用这个 RenderButton 方法, if else 阻塞

编辑:我现在能想到的唯一解决方案是为每个RenderFragment 方法创建一个组件

【问题讨论】:

【参考方案1】:

您的代码似乎适用于早期版本的 Blazor。

Blazor 现在有了更优雅的表示法,使用 templated delegates:

private RenderFragment RenderButton(int number) 

     return @<button type="button">@number</button>;

通常缩写为:

private RenderFragment RenderButton(int number) =>
         @<button type="button">@number</button>;

您的错误的解释是 __builder 是一个固定名称,由转译器使用。你也可以像这样修复你的代码:

// not recommended
private RenderFragment RenderButton(int number)
        
    return __builder =>
    
        <button type="button">@number</button>
    ;

razor 编译器能够对@; 进行智能切换,并将__builder =&gt; ... 部分插入窗帘后面。

【讨论】:

以上是关于blazor return RenderFragment '__builder' 在当前上下文中不存在的主要内容,如果未能解决你的问题,请参考以下文章

WTM Blazor,Blazor开发利器

Blazor学习之旅初步了解Blazor

Blazor 应用程序 /_blazor/disconnect 状态码 400

blazor 项目上的非 blazor 文件夹

Blazor学习之旅第一个Blazor应用

使用 Blazor 开发内部后台:了解 Blazor 组件