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

Blazor foreach循环绑定Checkbox报错:无法赋值给迭代变量item

解决方法

出现这个错误是因为foreach的迭代变量是只读的,双向绑定(@bind-Checked)会尝试修改变量的属性,编译器不允许直接操作迭代变量。以下两种方案可以解决:

方案一:使用for循环替代foreach

通过索引访问列表中的元素,直接绑定元素的属性:

@for (int i = 0; i < myPerson.Persons?.Count; i++)
{
    <MudCheckBox @bind-Checked="myPerson.Persons[i].IsAlive" />
}

@code{
    var myPerson = new MyPerson { Persons = new List<Person>() };
    
    public class MyPerson
    {
        public List<Person> Persons { get; set; }
    }   

    public class Person
    {
        public bool IsAlive { get; set; }
    }
}

这里通过索引myPerson.Persons[i]直接访问列表中的实际对象,绕过了只读的迭代变量限制。添加?.是为了避免列表为空时的空引用异常。

方案二:将迭代变量赋值给局部变量

在foreach内部把迭代变量赋值给一个可修改的局部变量,再绑定局部变量的属性:

@foreach (var item in myPerson.Persons ?? Enumerable.Empty<Person>())
{
    var person = item;
    <MudCheckBox @bind-Checked="person.IsAlive" />
}

@code{
    var myPerson = new MyPerson { Persons = new List<Person>() };
    
    public class MyPerson
    {
        public List<Person> Persons { get; set; }
    }   

    public class Person
    {
        public bool IsAlive { get; set; }
    }
}

局部变量person是原对象的引用,修改person.IsAlive会同步更新原列表中的对应对象。?? Enumerable.Empty<Person>()确保列表为空时不会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:12:11