Blazor 如何使用绑定到布尔数组

pas*_*hko 3 c# .net-core blazor

我有一个对象数组,其中有一个IsChecked属性。我用一个数组填满了表格,我在哪里为IsChecked属性做@bind 输入。

当我尝试切换值时,会出现错误。如果我立即更改 value IsChecked = true,则勾选复选标记。

for(var i = 0; i < firms.Length; i++)
{
    <tr>
        <td>@firms[i].ShortTitle</td>
        <th scope="row">
            <div class="custom-control custom-checkbox">
                <input type="checkbox" ... @bind="@firms[i].IsChecked" />
             ..
            </div>
        </th>
    </tr>
}

Run Code Online (Sandbox Code Playgroud)

错误:

Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer:警告:未处理的异常呈现组件:索引超出数组范围。

System.IndexOutOfRangeException: 索引超出数组范围。at ....<>c__DisplayClass0_1.b__6(Boolean __value) at Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensions.<>c__DisplayClass22_0`1.b__0(ChangeEventArgs e) --- 从上一个抛出异常的位置开始的堆栈跟踪结束- - 在 Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task) 在 Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle) Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost:错误:电路中未处理的异常LzL8iNZr7FmkJFJRS3QTW3QzJwP9R-p3CaclRHcE1_A.'。

System.IndexOutOfRangeException: 索引超出数组范围。在 Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensions.<>c__DisplayClass22_0`1.b__0(ChangeEventArgs e) 上的 ...<>c__DisplayClass0_1.b__6(Boolean __value) --- 从上一个抛出异常的位置开始的堆栈跟踪结束 ---在 Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task) 在 Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle)

我究竟做错了什么?

Isa*_*aac 8

在您的代码中的某处(您没有显示所有代码),“委托”EventCallback 被执行,但“索引超出了数组的边界”;发生这种情况是因为访问索引值的代码总是获得最后一个索引 + 1

要解决这个问题,请使用一个局部变量,您应该为其分配 i 的值,就像这样”

var local = i;
Run Code Online (Sandbox Code Playgroud)

在这里看到我的答案...

希望这可以帮助...