Меня раздражает то, что должно быть действительно простым представлением со списком элементов, включающих флажки.
@for (int i = 0; i < Model.ApiKeys.Count; i++)
{
<tr>
<td>@Html.TextBoxFor(m => m.ApiKeys[i].Name, new { @class = "api-input-150" })</td>
<td>@Html.CheckBoxFor(m => m.ApiKeys[i].Remove, new { @class = "api-input-50" })</td>
</tr>
}
Когда форма отправляется, я удаляю все элементы, помеченные для удаления, а затем возвращаю представление с новым набором данных.
Что я вижу, так это то, что если список все еще содержит элемент с тем же индексом, что и одна из строк, которые были удалены в записи, флажок элемента установлен неправильно, даже если для свойства Remove установлено значение false ,
например. список из 3 элементов> удалить элемент 2> второй элемент в списке проверяется при отображении представления.
список из 3 элементов> удалить элемент 3> в результирующем виде элементы не отмечены
список из 4 элементов> удалить элементы 1 и 2> оба оставшихся элемента отмечены в результирующем представлении
Если я обновлю страницу, то она будет правильно отображаться, поэтому я временно обошел эту проблему, выполнив RedirectToAction, чтобы принудительно вызвать GET для представления вместо простого возврата представления из POST, но хотел бы знать, что происходит неправильно и как Я могу исправить это правильно.
Вот фактические фрагменты кода из двух действий:
public ActionResult Index()
{
return View(GetSettings());
}
[HttpPost]
public ActionResult Index(Model.Setup settings)
{
if (ModelState.IsValid)
{
SaveSettings(settings);
return View(GetSettings());
}
else
{
return View(settings);
}
}
Учитывая, что мои базовые данные все обновляются правильно, и это происходит только в ответе на POST, мне интересно, есть ли какая-то функция браузера в игре, которая кэширует проверенное состояние и переопределяет то, что фактически пытается выполнить мое представление оказывать ...
... или, может быть, есть настоящая простая ошибка, которую я упускаю из-за того, что слишком долго на нее смотрю!