Мой текущий вид отображает список сотрудников. Все отображаемые строки и столбцы привязаны к модели.
См. Мой код для просмотра ниже:
@using System.Linq
@using DN_.Extensions
@model DN_.Models.NotificationsModel
<script src="~/Scripts/jquery-3.3.1.min.js"></script>
<script type="text/javascript" language="javascript">
$(function () {
$("#checkAll").click(function () {
$("input[id='cb_Notify']").prop("checked", this.checked).change();
var count = $("input[name='cb_Notify']:checked").length;
})
$("input[id='cb_Notify']").click(function () {
if ($("input[name='cb_Notify']:checked").length == $("input[id='cb_Notify']").length) {
$("#checkAll").prop("checked", "checked").change();
}
else {
$("#checkAll").removeProp("checked").change();
}
})
})
</script>
@{
ViewBag.Title = "Link Employees";
}
<h2>Link Employees</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<input id="btn_Save" type="submit" value="Save" class="btn btn-default" />
@Html.ActionLink("Back to List", "Index")
<p>
Select All <input type="checkbox" id="checkAll" />
Select All On Premise <input type="checkbox" id="checkAllOnPremise" />
Select All Full Timers<input type="checkbox" id="checkAllFullTimers" />
</p>
<table class="table">
<tr>
<th align=center>Notify?</th>
<th align=center>Employee Name</th>
<th align=center>Is On Premise</th>
<th align=center>Is Full Time</th>
<th align=center>Notified On</th>
</tr>
@for (var i = 0; i < Model.EmployeeNotification.Count; i++)
{
<tr>
<td>
@*Do not allow editing of the Notify field for employees who have been sent the notification already*@
@if (Model.EmployeeNotification[i].NotifiedOn >= DateTime.Parse("2000-01-01 12:00:00 AM"))
{
@Html.DisplayFor(modelItem => Model.EmployeeNotification[i].Notify)
}
else
{
@*Hidden items for the post back information*@
@Html.HiddenFor(modelItem => Model.EmployeeNotification[i].NotificationID)
@Html.HiddenFor(modelItem => Model.EmployeeNotification[i].EmployeeID)
@Html.HiddenFor(modelItem => Model.EmployeeNotification[i].EmployeeName)
@*BELOW 3 LINES ARE THE PROBLEM DESCRIBED*@
@Html.EditorFor(modelItem => Model.EmployeeNotification[i].Notify)
@Html.CheckBoxFor(modelItem => Model.EmployeeNotification[i].Notify)
@*This checkbox below works with the "Select All" option, but data is not posted back.*@
@Html.CheckBox("cb_Notify", Model.EmployeeNotification[i].Notify)
}
</td>
<td>
@Model.EmployeeNotification[i].EmployeeName
</td>
<td>
@Html.DisplayFor(modelItem => Model.EmployeeNotification[i].IsOnPremise)
</td>
<td>
@Html.DisplayFor(modelItem => Model.EmployeeNotification[i].IsFullTime)
</td>
<td>
@if (Model.EmployeeNotification[i].NotifiedOn >= DateTime.Parse("2000-01-01 12:00:00 AM"))
{
@Html.RenderDate(Model.EmployeeNotification[i].NotifiedOn, "dd MMM yyyy")
}
</td>
</tr>
}
</table>
}
Моя проблема заключается в следующем:
Я могу вручную установить все флажки уведомлений с помощью первой строки кода флажка уведомлений (т. Е. Используя опции EditorFor и CheckBoxFor) и сохранить данные в событии обратной отправки.
Как установить флажок «Выбрать все» для работы с флажком «Редактор для» или «флажок для модели».
Для меня именованная опция CheckBox работает, как и предполагалось, с полем «Выбрать все», но мне не удается вернуть данные в обработчик событий после события. Данные модели для выбранного столбца Уведомление возвращаются как ноль.
Основная проблема, которую я предполагаю, заключается в том, как автоматизация называет элементы для флажков, если я смотрю на сгенерированные коды элементов name и id при отладке (пример выходных данных исходного кода с некоторыми добавленными моими комментариями):
<td>
<!--Required, hidden data for post back event handler:-->
<input name="EmployeeNotification[3].NotificationID" id="EmployeeNotification_3__NotificationID" type="hidden" value="6" data-val-number="The field NotificationID must be a number." data-val="true">
<input name="EmployeeNotification[3].EmployeeID" id="EmployeeNotification_3__EmployeeID" type="hidden" value="27" data-val-number="The field EmployeeID must be a number." data-val="true">
<input name="EmployeeNotification[3].EmployeeName" id="EmployeeNotification_3__EmployeeName" type="hidden" value="Charlie">
<!--@Html.EditorFor element-->
<input name="EmployeeNotification[3].Notify" id="EmployeeNotification_3__Notify" type="checkbox" value="true" data-val="true" data-val-required="The Notify field is required.">
<input name="EmployeeNotification[3].Notify" type="hidden" value="false">
<!--@Html.CheckBoxFor element-->
<input name="EmployeeNotification[3].Notify" id="EmployeeNotification_3__Notify" type="checkbox" value="true">
<input name="EmployeeNotification[3].Notify" type="hidden" value="false">
<!--@Html.CheckBox element-->
<input name="cb_Notify" id="cb_Notify" type="checkbox" value="true">
<input name="cb_Notify" type="hidden" value="false">
</td>
Поэтому мне нужно либо установить флажок Выбрать все для работы с параметрами @ Html.EditorFor, либо @ Html.CheckBoxFor ИЛИ Мне нужно получить значение, установленное в @ Html.CheckBox, в обработчике событий post.
Я не смог получить ответы, которые мне нужны, на другие похожие вопросы на флажках «Выбрать» или «Отметить все», так как они, похоже, используют другие языки кодирования. Пожалуйста помоги.
Обратите внимание:
Просто чтобы подчеркнуть очевидное: намерение состоит в том, чтобы сохранить только один из выбираемых флажков Уведомлять в конце. Тот, который будет работать. Не все трое. Я просто покажу их из-за неудачного тестирования и отладки.