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
相关产品推荐
相关产品推荐

