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

bug*_*uga 6 blazor blazor-server-side asp.net-blazor blazor-webassembly

我试图RenderFragment从组件私有方法返回 a ,但出现编译错误:

'__builder' does not exist in the current context
Run Code Online (Sandbox Code Playgroud)

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

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

@code {
    private RenderFragment RenderButton(int number)
    {        
        return builder =>
        {
            <button type="button">@number</button>
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Hen*_*man 13

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

Blazor 现在有一个更优雅的表示法,使用模板化委托

private RenderFragment RenderButton(int number) 
{
     return @<button type="button">@number</button>;
}
Run Code Online (Sandbox Code Playgroud)

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

// not recommended
private RenderFragment RenderButton(int number)
{        
    return __builder =>
    {
        <button type="button">@number</button>
    };
}
Run Code Online (Sandbox Code Playgroud)

razor 编译器能够对@和进行智能切换;,并将该__builder => ...部分插入幕后。