【问题标题】:Blazor How to use a bind to an array of booleans [duplicate]Blazor如何使用绑定到布尔数组[重复]
【发布时间】:2019-09-12 16:19:42
【问题描述】:

我有一个对象数组,其中有一个IsChecked 属性。 我用一个数组填充表格,对于 IsChecked 属性我做@bind 来输入。

当我尝试切换值时,会出现错误。 如果我立即更改值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>
}

错误:

Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer: 警告:未处理的异常呈现组件:索引在外部 数组的边界。

System.IndexOutOfRangeException:索引超出范围 大批。在 ....c__DisplayClass0_1.b__6(布尔 __value) 在 Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensions。c__DisplayClass22_0`1.b__0(ChangeEventArgs e) --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(任务 任务)在 Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(任务 任务处理) Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost:错误: 电路中未处理的异常 'LzL8iNZr7FmkJFJRS3QTW3QzJwP9R-p3CaclRHcE1_A.'。

System.IndexOutOfRangeException:索引超出范围 大批。在 ...c__DisplayClass0_1.b__6(布尔 __value) 在 Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensions。c__DisplayClass22_0`1.b__0(ChangeEventArgs e) --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(任务 任务)在 Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(任务 任务处理)

我做错了什么?

【问题讨论】:

  • 我的钱花在了被闭包捕获的循环变量上,所以一旦它尝试实际绑定,i == firms.Length。如果您只是在每次迭代的页面上打印i 会发生什么?是firms.Length的值firms.Length次吗?

标签: c# .net-core blazor


【解决方案1】:

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

要解决此问题,请使用应为其分配 i 值的局部变量,例如“

var local = i;

See my answer here...

希望这会有所帮助...

【讨论】:

  • 确实有帮助,但我已经将 for 循环更改为 foreach
  • 是的,这是为 foreach() 循环修复的,而不是 for()。解释是生成的代码中包含一个 lambda,google "lambda closure"。
猜你喜欢
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多