У меня есть форма, состоящая из многих элементов (например, заказ товаров на заказ Amazon). Каждая строка имеет связанный с ними флажок, поэтому пользователь может выбрать несколько элементов и нажать «удалить».
Форма построена примерно так;
<% for (int i = 0; i < Model.OrderItems.Count; i++) { %>
<tr>
<td><%= Html.Hidden(String.Format("OrderItems[{0}].Id", i), Model.OrderItems[i].Id)%>
<%= Html.CheckBox(String.Format("OrderItems[{0}].Checked", i), Model.OrderItems[i].Checked)%></td>
<td><%= Html.TextBox(String.Format("OrderItems[{0}].Name", i), Model.OrderItems[i].Name)%></td>
<td><%= Html.TextBox(String.Format("OrderItems[{0}].Cost", i), Model.OrderItems[i].Cost)%></td>
<td><%= Html.TextBox(String.Format("OrderItems[{0}].Quantity", i), Model.OrderItems[i].Quantity)%></td>
</tr>
<% } %>
Связыватель модели отлично справляется со своей задачей, и список заполняется правильно. Однако после того, как я обработаю запрос в действии (например, удалю соответствующие элементы) и верну новое представление, содержащее меньше элементов, состояние формы будет "полу-сохраненным". Некоторые флажки остаются отмеченными, даже если в модели редактирования для всех логических значений установлено значение false.
У меня нет этой проблемы, если я возвращаю RedirectToActionResult
, но использование этого в качестве решения кажется немного хакерским.
Я думаю, что мне нужно сбросить/обновить ModelState или что-то подобное, но я не уверен, какие условия искать, чтобы узнать, как это сделать.