如何在使用布尔值列表的 Blazor 服务器应用程序中添加动态复选框?
How to add dynamic checkboxes in a Blazor-server app that use a list of booleans?
为了进一步澄清我的问题,我将首先向您展示如何使用我正在使用的 blazor 组件库添加一个复选框:
<MudCheckBox @bind-Checked="@Basic_CheckBox1"></MudCheckBox>
@code{
public bool Basic_CheckBox1 { get; set; } = false;
}
上面的代码创建了一个复选框,然后根据复选框是否被选中来将布尔值 Basic_CheckBox1 切换为 true 或 false。
这是我的代码
@for (int i = 0; i < checkboxNames.Count; i++)
{
<MudCheckBox @bind-Checked="@checkboxBools[i]" Label="@checkboxNames[i]"></MudCheckBox>
}
此代码一直有效,直到我选中或取消选中我创建的复选框,然后出现索引超出范围错误,我该如何解决?我需要使用布尔值列表,因为我不知道在运行时之前我需要多少复选框,如果有任何其他解决方案请告诉我。
可以把它想象成绑定不是在那里然后在循环中完成的,而是稍后完成的。到绑定完成时,i
的值已超出数组长度的末尾,已重复递增。相反,您可以将循环变量 i
的当前值保存到另一个变量中,然后在绑定中使用该其他变量:
@for (int i = 0; i < checkboxNames.Length; i++)
{
var x = i;
<MudCheckBox @bind-Checked="@checkboxBools[x]" Label="@checkboxNames[i]"></MudCheckBox>
}
checkBoxBools 应该是一个 array/list 与 checkBoxNames 长度相同(初始化为具有相同数量的元素)。例如:
string[] checkboxNames = new string[]{"a","b","c"};
bool[] checkboxBools = new bool[3];
或者,如果其他东西提供了可变数量的名称:
checkboxNames = context.People.Select(p => p.Name).ToArray();
checkboxBools = new bool[checkBoxNames.Length];
为了进一步澄清我的问题,我将首先向您展示如何使用我正在使用的 blazor 组件库添加一个复选框:
<MudCheckBox @bind-Checked="@Basic_CheckBox1"></MudCheckBox>
@code{
public bool Basic_CheckBox1 { get; set; } = false;
}
上面的代码创建了一个复选框,然后根据复选框是否被选中来将布尔值 Basic_CheckBox1 切换为 true 或 false。 这是我的代码
@for (int i = 0; i < checkboxNames.Count; i++)
{
<MudCheckBox @bind-Checked="@checkboxBools[i]" Label="@checkboxNames[i]"></MudCheckBox>
}
此代码一直有效,直到我选中或取消选中我创建的复选框,然后出现索引超出范围错误,我该如何解决?我需要使用布尔值列表,因为我不知道在运行时之前我需要多少复选框,如果有任何其他解决方案请告诉我。
可以把它想象成绑定不是在那里然后在循环中完成的,而是稍后完成的。到绑定完成时,i
的值已超出数组长度的末尾,已重复递增。相反,您可以将循环变量 i
的当前值保存到另一个变量中,然后在绑定中使用该其他变量:
@for (int i = 0; i < checkboxNames.Length; i++)
{
var x = i;
<MudCheckBox @bind-Checked="@checkboxBools[x]" Label="@checkboxNames[i]"></MudCheckBox>
}
checkBoxBools 应该是一个 array/list 与 checkBoxNames 长度相同(初始化为具有相同数量的元素)。例如:
string[] checkboxNames = new string[]{"a","b","c"};
bool[] checkboxBools = new bool[3];
或者,如果其他东西提供了可变数量的名称:
checkboxNames = context.People.Select(p => p.Name).ToArray();
checkboxBools = new bool[checkBoxNames.Length];