Για μένα, λύση Jeremy ως επί το πλείστον εργαστεί, αλλά έπρεπε να αντικατασταθεί .attr με .prop. Διαφορετικά, αφού την έχω μονό κλικ σε ένα πλαίσιο ελέγχου, θα σταματήσει να αντιδρά με το πλαίσιο ελέγχου «master».
στο (κύρια σελίδα) _Layout.cshtml
$(document).ready(
manageCheckboxGroup('chkAffectCheckboxGroup', 'checkbox-group')
);
σε αναφορά .js
function manageCheckboxGroup(masterCheckboxId, slaveCheckboxesClass) {
$("#" + masterCheckboxId).click(function () {
$("." + slaveCheckboxesClass).prop('checked', this.checked);
});
$("." + slaveCheckboxesClass).click(function () {
if (!this.checked) {
$("#" + masterCheckboxId).prop('checked', false);
}
else if ($("." + slaveCheckboxesClass).length == $("." + slaveCheckboxesClass + ":checked").length) {
$("#" + masterCheckboxId).prop('checked', true);
}
});
}
στην HTML σελίδα (ξυράφι)
<table class="table">
<thead>
<tr>
<th><input id="chkAffectCheckboxGroup" type="checkbox" checked="checked" /></th>
<th>
@Html.DisplayNameFor(model => model.Clients[0].ClientId)
</th>
<th>
@Html.DisplayNameFor(model => model.Clients[0].Name)
</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Clients.Count(); i++)
{
<tr>
<td>
<input type="hidden" asp-for="Clients[i].Id" class="form-control" />
<input type="hidden" asp-for="Clients[i].Name" />
<input type="checkbox" class="checkbox-group" asp-for="Clients[i].Selected" />
</td>
<td>
@Html.DisplayFor(modelItem => Model.Clients[i].Id)
</td>
<td>
@Html.DisplayFor(modelItem => Model.Clients[i].Name)
</td>
</tr>
}
</tbody>
</table>
ΣΗΜΑΝΤΙΚΟ:
Επίσης, κατά την πρώτη είχα μια @foreachθηλιά στην HTML και δεν λειτούργησε ..., πρέπει να χρησιμοποιήσετε ένα @for (int i = 0; i < Model.Clients.Count(); i++)βρόχο αντί αλλιώς μπορεί να καταλήξετε με ένα άδειο Κατάλογο OnPostAsync().