Blazor自定义组件传参报错:当前上下文中不存在‘users’
解决Blazor编译错误:“The name 'users' does not exist in the current context”
问题原因
你在@code块的类成员声明区域直接执行了users.Add(user)语句,C#不允许在类的成员级别直接编写可执行代码,这类操作必须放在方法、构造函数或者初始化逻辑中。
修正方案
提供三种可行的修改方式,任选其一即可:
方式1:集合初始化时直接添加元素
直接在List的初始化器里添加User对象,无需额外调用Add方法:
@page "/transactions/list" @using Accounting.Web.Components.DataTable; <h3>List</h3> <DataTable Items="users" class="table table-bordered"> </DataTable> @code { public class User { public int Id { get; set; } public string Username { get; set; } } public List<User> users { get; set; } = new() { new User { Id = 1, Username = "Me" } }; }
方式2:使用Blazor生命周期方法OnInitialized
将添加元素的逻辑放到Blazor组件的初始化生命周期方法中:
@page "/transactions/list" @using Accounting.Web.Components.DataTable; <h3>List</h3> <DataTable Items="users" class="table table-bordered"> </DataTable> @code { public class User { public int Id { get; set; } public string Username { get; set; } } public List<User> users { get; set; } = new(); protected override void OnInitialized() { var user = new User { Id = 1, Username = "Me" }; users.Add(user); } }
方式3:使用构造函数
如果需要在组件实例化时就完成元素添加,可以用构造函数:
@page "/transactions/list" @using Accounting.Web.Components.DataTable; <h3>List</h3> <DataTable Items="users" class="table table-bordered"> </DataTable> @code { public class User { public int Id { get; set; } public string Username { get; set; } } public List<User> users { get; set; } = new(); public List() // 类名需与组件匹配,默认是页面文件名,比如List { var user = new User { Id = 1, Username = "Me" }; users.Add(user); } }
关键说明
C#类的代码结构中,成员声明(字段、属性、嵌套类等)和可执行逻辑是分离的。你原代码中users.Add(user)属于可执行语句,必须放在方法、构造函数这类可执行代码块内,编译器才能正确识别users的上下文,避免出现“当前上下文中不存在名称‘users’”的错误。
内容的提问来源于stack exchange,提问作者Musaffar Patel
相关产品推荐
相关产品推荐

