【问题标题】:How to use the array of checkbox in ASP.NET Core Razor? [duplicate]如何在 ASP.NET Core Razor 中使用复选框数组? [复制]
【发布时间】:2021-03-07 00:16:18
【问题描述】:
@for (int i = 0; i < values.Count; i++)
{
    <input type="checkbox" @bind="values[i]" />
}
@code {
    private List<bool> values = new List<bool>() { true, true, false };
}

为什么点击上面代码生成的“复选框”会出现如下异常?

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

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

【问题讨论】:

    标签: asp.net-core razor blazor


    【解决方案1】:

    在您的 for 循环中,您遍历 i。在每次迭代中,i 的值都会增加 1。该值不一定是values[1],而是values[i],这是在每个元素的最后一次迭代3之后。 3 违反了数组边界,因此异常。

    根本原因是 lambda 表达式用于进行此绑定。在这个 lambda 表达式中,i 不是一个值,而是一个引用。查看this post 的类似示例。

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

    @for (int i = 0; i < values.Count; i++)
    {
        var temp = i;
        <input type="checkbox" @bind="values[temp]" />
    }
    
    

    【讨论】:

    • 你的回答很详细,对我解决其他问题很有启发。谢谢^_^
    【解决方案2】:

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

    @for (int i = 0; i < values.Count; i++)
    {
        var iCopy = i;
        <input type="checkbox" @bind="values[iCopy]" />
    }
    

    【讨论】:

    • 我更喜欢你的 iCopy。 :)。比 temp 更具描述性的名称。
    猜你喜欢
    • 2020-02-03
    • 2014-02-03
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    相关资源
    最近更新 更多