私は多くのアイテムで構成されたフォームを持っています(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>
<% } %>
モデルバインダーはその魔法をうまく実行し、リストは正しく入力されます。ただし、アクションでリクエストを処理し(たとえば、適切なアイテムを削除して)、より少ないアイテムを含む新しいビューを返した後、フォームの状態は「半」持続します。編集モデルではすべてのboolがfalseに設定されていますが、一部のチェックボックスはオンのままです。
を返す場合、この問題は発生しませんがRedirectToActionResult
、それを解決策として使用することは、少し厄介な回避策のようです。
ModelState、または同様の何かをフラッシュ/更新する必要があると思いますが、その方法を見つけるために検索する用語がわかりません。