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

.NET 6 Blazor Server组件报错:变量在当前上下文不存在

问题原因与解决方案

你遇到的报错是因为在Blazor组件的类作用域中直接执行了赋值/操作语句,C#类的成员定义区域只能做声明、字段/属性初始化器,不能直接放置独立的执行代码(比如单独的ResourceList = new List<Resource>()或Add调用),这些代码必须放在构造函数、组件生命周期方法或者初始化器中。

以下是几种可行的修正方案:

方案1:属性声明时直接初始化+生命周期方法添加元素

这是Blazor组件中最常用的写法,利用属性初始化器创建列表实例,再在组件初始化生命周期方法中添加元素:

@using Models

<div>
<h2>Resources</h2>

<table>
    <thead>
        <tr>
            <th>Name</th>
            <th>State</th>
        </tr>
    </thead>
    <tbody>
        @foreach (Resource resource in ResourceList)
        {
            <tr>
                <td>@resource.Name</td>
                <td>@resource.DisplayStatus</td>
            </tr>
         }
    </tbody>
</table>
</div>

@code {
    // 直接在属性声明时初始化List实例
    public List<Resource> ResourceList { get; set; } = new List<Resource>();

    protected override void OnInitialized()
    {
        // 在组件初始化生命周期方法中添加元素
        ResourceList.Add(new Resource());
    }
}

方案2:使用构造函数初始化

如果需要在组件实例化时就完成所有初始化逻辑,可以用构造函数:

@using Models

<!-- 页面部分代码不变 -->
<div>
<h2>Resources</h2>
<!-- ... 表格代码省略 ... -->
</div>

@code {
    public List<Resource> ResourceList { get; set; }

    // 构造函数中完成初始化和元素添加
    public Resources()
    {
        ResourceList = new List<Resource>();
        ResourceList.Add(new Resource());
    }
}

方案3:代码后置文件(Resources.razor.cs)写法

如果使用代码分离的方式,同样要遵循C#类语法规则,将初始化逻辑放在生命周期方法或构造函数中:

public partial class Resources
{
    public List<Resource> ResourceList { get; set; }

    protected override void OnInitialized()
    {
        ResourceList = new List<Resource>();
        ResourceList.Add(new Resource());
    }
}

核心说明

不管是List<Resource>还是string/int类型,所有变量的操作代码都不能直接写在类的顶级作用域中,必须放在方法(比如组件生命周期方法OnInitialized、OnParametersSet)或构造函数内,这是C#类的基础语法规则,和Blazor本身无关。

内容的提问来源于stack exchange,提问作者Jan Matějíček

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 07:33:30