Это работает:
@if (brandFilters.Count != 0) {
@for (var i = 0; i < brandFilters.Count(); i++)
{
<li>
<input asp-for="@brandFilters[i].Selected" class="form-check-input" onclick="this.form.submit();" />
<label asp-for="@brandFilters[i].Selected">@brandFilters[i].Text</label>
<input type="hidden" asp-for="@brandFilters[i].Value" />
<input type="hidden" asp-for="@brandFilters[i].Text" />
</li>
}
}
Это не работает:
@if (colorFilters.Count != 0) {
@for (var i = 0; i < colorFilters.Count(); i++)
{
<li>
<input asp-for="@colorFilters[i].Selected" class="form-check-input" onclick="this.form.submit();" />
<label asp-for="@colorFilters[i].Selected">@colorFilters[i].Text</label>
<input type="hidden" asp-for="@colorFilters[i].Value" />
<input type="hidden" asp-for="@colorFilters[i].Text" />
</li>
}
}
Смущен? Я тоже. Я использую ViewData, привязанный к контроллеру, для отправки списка «SelectListItem» для «Brand» и «Color». Оба списка заполнены. Бренд работает без нареканий. Он использует GUID для своей стоимости. Цвет, использует целое число для его значения. Это единственное отличие во всем. Начальная загрузка полных списков в порядке. Добавляя и удаляя бренды, корректно обновляет параметры цвета (удаляя их как выбранные элементы). Обратное верно. Выбор цвета при начальной загрузке удаляет параметры из выбора бренда. Разница здесь в том, что скрытые поля корректно обновляются для бренда, но скрытые поля остаются ПОСЛЕДОВАТЕЛЬНЫМИ для цветных флажков.
<li>
<input class="form-check-input" onclick="this.form.submit();" type="checkbox" data-val="true" data-val-required="The Selected field is required." id="colorFilters_0__Selected" name="colorFilters[0].Selected" value="true" />
<label for="colorFilters_0__Selected">Gold</label>
<input type="hidden" id="colorFilters_0__Value" name="colorFilters[0].Value" value="1" />
<input type="hidden" id="colorFilters_0__Text" name="colorFilters[0].Text" value="Black" />
</li>
<li>
<input class="form-check-input" onclick="this.form.submit();" type="checkbox" data-val="true" data-val-required="The Selected field is required." id="colorFilters_1__Selected" name="colorFilters[1].Selected" value="true" />
<label for="colorFilters_1__Selected">Red</label>
<input type="hidden" id="colorFilters_1__Value" name="colorFilters[1].Value" value="2" />
<input type="hidden" id="colorFilters_1__Text" name="colorFilters[1].Text" value="White" />
</li>
Флажок и метка получают правильные данные. Правильное значение передается в ViewData контроллером и проверяется во время выполнения. Значения должны быть 6 и 7, красный и золотой. Не 1 и 2, черно-белое.
Этот код используется для построения списка SelectListItem:
ColorFilterListOutbound.Add(new SelectListItem { Text = item.Value, Value = item.ColorListId.ToString(), Selected = false });
Подводя итог: Все работает нормально, пока я не отправлю обратно что-либо кроме полный список цветных флажков. Часть данных (визуальная) обновляется нормально. Оба скрытых поля для каждого флажка принимают старые последовательные данные.