C# Blazor如何使用绑定到布尔数组
我有一个对象数组,其中有一个C# Blazor如何使用绑定到布尔数组,c#,.net-core,blazor,C#,.net Core,Blazor,我有一个对象数组,其中有一个IsChecked属性。 我用一个数组填充表格,其中对属性进行了检查,并@bind to input 当我尝试切换该值时,会出现错误。 如果我立即更改值IsChecked=true,则勾选复选标记 for(var i = 0; i < firms.Length; i++) { <tr> <td>@firms[i].ShortTitle</td> <th scope="row">
IsChecked
属性。
我用一个数组填充表格,其中对属性进行了检查,并@bind to input
当我尝试切换该值时,会出现错误。
如果我立即更改值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>
}
for(var i=0;i
错误:
Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer:
警告:未处理的异常呈现组件:索引在外部
数组的边界
System.IndexOutOfRangeException:索引超出了
数组。在…c_uuu显示类0_u1.b_uuu6(布尔值
__在Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensions.c_uuDisplayClass22_0`1.b_u0(ChangeEventArgs
(e)
---来自引发异常的上一个位置的堆栈结束跟踪---在
Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(任务
任务)在
Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(任务
taskToHandle)
Microsoft.AspNetCore.Components.Server.Circuits.Circuits主机:错误:
电路中未处理的异常
“LzL8iNZr7FmkJFJRS3QTW3QzJwP9R-p3CaclRHcE1_A.”
System.IndexOutOfRangeException:索引超出了
数组。在…c_uuu显示类0_u1.b_uuu6(布尔值
__在Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensions.c_uuDisplayClass22_0`1.b_u0(ChangeEventArgs
(e)
---来自引发异常的上一个位置的堆栈结束跟踪---在
Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(任务
任务)在
Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(任务
taskToHandle)
我做错了什么?在代码中的某个地方(您没有显示所有代码),执行了“委托”事件回调,但“索引超出了数组的边界”;这是因为访问索引值的代码总是得到最后一个索引+1
要解决这个问题,请使用一个局部变量,您应该将i的值赋给它,类似这样的“
希望这有帮助…我的钱在循环变量上,它被捕获在一个闭包中,所以一旦它尝试实际绑定,i==firms.Length
。如果在每次迭代中只将i
打印到页面上,会发生什么情况?它是firms.Length
的值firms.Length
次吗?它确实有帮助,但我已经将for循环更改为foreachYes,这是foreach()循环的固定值,而不是for()。解释是生成的代码包含一个lambda,google的“lambda闭包”。
var local = i;