【发布时间】:2019-12-06 14:33:56
【问题描述】:
如何使用 Blazor 为复选框集合实现“全选”复选框?有很多使用 JavaScript/jQuery 的示例,但我尝试使用 C# 来代替。
这就是我现在正在使用的东西。此代码可以将所选月份添加到列表中,但是当使用“全选”复选框时,其他框未选中。
注意:@Months[0].MonthName = Select All
<ul class="checkbox-grid">
<li>
<input type="checkbox"
@onchange="EventArgs => { CheckAllMonths(Months[0], EventArgs.Value); }" />
<label for="@Months[0].MonthId" id="checkboxLabel">@Months[0].MonthName</label>
</li>
</ul>
@{
for (int i = 1; i < Months.Count(); i++)
{
int j = i;
<ul class="checkbox-grid">
<li>
<input type="checkbox" name="@Months[j].IsMonthChecked"
@onchange="EventArgs => { CheckManualMonth(Months[j], EventArgs.Value); }" />
<label for="@Months[j].MonthId" id="checkboxLabel">@Months[j].MonthName</label>
</li>
</ul>
}
}
@code {
List<Month> MonthList = new List<Month>();
void CheckAllMonths(Month month, object checkValue)
{
if((bool)checkValue)
{
foreach(var item in Months)
{
CheckManualMonth(item, checkValue);
}
}
else
{
foreach(var item in Months)
{
CheckManualMonth(item, checkValue);
}
}
}
void CheckManualMonth(Month month, object checkedValue)
{
if((bool)checkedValue)
{
if(!MonthList.Contains(month))
{
MonthList.Add(month);
month.IsMonthChecked = true;
}
}
else
{
if(MonthList.Contains(month))
{
MonthList.Remove(month);
month.IsMonthChecked = false;
}
}
}
}
初始化月份
private void GetMonthChecklist()
{
List<Month> months = new List<Month>()
{
new Month{MonthId = 0, MonthName = "All Months", IsMonthChecked = false},
new Month{MonthId = 1, MonthName = "Jan", IsMonthChecked = false},
new Month{MonthId = 2, MonthName = "Feb", IsMonthChecked = false},
new Month{MonthId = 3, MonthName = "Mar", IsMonthChecked = false},
new Month{MonthId = 4, MonthName = "Apr", IsMonthChecked = false},
new Month{MonthId = 5, MonthName = "May", IsMonthChecked = false},
new Month{MonthId = 6, MonthName = "Jun", IsMonthChecked = false},
new Month{MonthId = 7, MonthName = "Jul", IsMonthChecked = false},
new Month{MonthId = 8, MonthName = "Aug", IsMonthChecked = false},
new Month{MonthId = 9, MonthName = "Sep", IsMonthChecked = false},
new Month{MonthId = 10, MonthName = "Oct", IsMonthChecked = false},
new Month{MonthId = 11, MonthName = "Nov", IsMonthChecked = false},
new Month{MonthId = 12, MonthName = "Dec", IsMonthChecked = false}
};
Months = months.ToList();
}
【问题讨论】:
-
你能提供一个你正在寻找的例子吗?您是否正在寻找一个可以切换其他复选框的单独复选框?
-
刚刚做了。就像我在更新的代码中所说的那样,全选复选框将所有月份添加到 MonthList,但 UI 并未显示它们已选中。
-
您是否尝试在将
month.IsMonthChecked = true添加到列表之前对其进行设置? -
jcruz,是的,我也试过了,还是不行
-
在您的标记中,您使用的是
Months变量。那在哪里定义/设置?您的代码块中的一个名为MonthsList而不是Months
标签: c# asp.net-core blazor