Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 如何在ASP.NET Core Razor中使用复选框数组? @for(int i=0;i_Asp.net Core_Razor_Blazor - Fatal编程技术网

Asp.net core 如何在ASP.NET Core Razor中使用复选框数组? @for(int i=0;i

Asp.net core 如何在ASP.NET Core Razor中使用复选框数组? @for(int i=0;i,asp.net-core,razor,blazor,Asp.net Core,Razor,Blazor,为什么在我单击由上述代码生成的“复选框”时出现以下异常 未处理的异常呈现组件:索引超出范围。必须为非负数且小于集合的大小 正确的方法是什么?非常感谢。这是C#行为的结果。 您可以使用foreach循环或捕获变量 @code { private List<bool> values = new List<bool>() { true, true, false }; } @for(int i=0;i

为什么在我单击由上述代码生成的“复选框”时出现以下异常

未处理的异常呈现组件:索引超出范围。必须为非负数且小于集合的大小

正确的方法是什么?非常感谢。

这是C#行为的结果。 您可以使用foreach循环或捕获变量

@code {
    private List<bool> values = new List<bool>() { true, true, false };
}
@for(int i=0;i
在for循环中迭代
i
。在每次迭代中,
i
的值增加1。该值不绑定到值[1],而是绑定到每个元素最后一次迭代3之后的值[i]。3违反数组边界,因此出现异常

根本原因是使用lambda表达式进行绑定。在这个lambda表达式中,
i
不是一个值,而是一个引用。请看一个类似的例子

要防止出现这种情况,请在for循环中添加一个新变量,以保存
i
的当前值

@for (int i = 0; i < values.Count; i++)
{
    var iCopy = i;
    <input type="checkbox" @bind="values[iCopy]" />
}
@for(int i=0;i
您的回答非常详细,对我解决其他问题很有启发性。谢谢^ ^我更喜欢你的iCopy。比temp更具描述性的名称。
@for (int i = 0; i < values.Count; i++)
{
    var iCopy = i;
    <input type="checkbox" @bind="values[iCopy]" />
}
@for (int i = 0; i < values.Count; i++)
{
    var temp = i;
    <input type="checkbox" @bind="values[temp]" />
}