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

Blazor中如何在Builder委托内设置事件处理程序?

解决Blazor递归树形结构中@onclick的CS0027错误

问题分析

你遇到的CS0027错误,本质是在字段初始化器中提前捕获this导致的——组件实例尚未完全初始化时,this的上下文无效。同时原代码的事件绑定没有给Select方法传递必要的TreeNode参数,这也是需要修正的点。

修正方案

把递归渲染逻辑直接整合到GetLevel方法中,避免传递this,同时通过lambda表达式给@onclick传递当前节点参数:

public async Task Select(InstallationTree.TreeNode node)
{
    // 这里添加你的选中逻辑
}

private RenderFragment GetLevel(InstallationTree.TreeNode root) => __builder =>
{
    foreach (var l in root.ChildLocations)
    {
        <div class="row" @onclick="() => Select(l)">                        
            <div class="name col">@l.Name</div>
            <div class="count col">@l.Count</div>
        </div>
        @GetLevel(l);
    }
};

关键修改点

  • 移除了单独的AsLevel字段,将递归逻辑直接内联到GetLevel方法中,无需手动传递this,自然避免了上下文错误。
  • 使用@onclick="() => Select(l)"的lambda表达式,既解决了Select方法的参数传递问题,也符合Blazor事件绑定的规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:42:14