リストを MVC ビューに渡し、リスト内の各オブジェクトのチェックボックスを生成しています (チェックボックスの名前は t.Name です)。
フォームが投稿されたら、どのチェックボックスがチェックされたかがわかるようにしたいと思います。ただし、FormCollection オブジェクトの使用は避けたいと思います。これを行う方法はありますか?
リストを MVC ビューに渡し、リスト内の各オブジェクトのチェックボックスを生成しています (チェックボックスの名前は t.Name です)。
フォームが投稿されたら、どのチェックボックスがチェックされたかがわかるようにしたいと思います。ただし、FormCollection オブジェクトの使用は避けたいと思います。これを行う方法はありますか?
チェックボックスの名前を "MyObject[" + index + "].Checked" のように設定し、チェックボックスごとに "MyObject[" + index + "].Name" のような名前の非表示の入力フィールドを値とともに設定します。 t.Name に設定します。
フィールドにそのような名前を付けると、既定のモデル バインダーはフォームの値を取得し、それらを Name プロパティと Checked プロパティを持つオブジェクトのリストにマップできます。
次のようなことを試してみます。
<% foreach(var t in Model)
{ %>
<div>
<%= Html.Hidden("MyObject[" + index + "].Name", t.Name, new { id = "MyObject_" + index + "_Name" }) %>
<%= Html.Checkbox("MyObject[" + index + "].Checked", false, new { id = "MyObject_" + index + "_Checked" }) %>
</div><%
} %>
MVC フレームワーク コンポーネントが無効な id 値を持つ HTML 要素を生成しないように、id プロパティを持つ匿名型を使用しますが、実際には必要ありません。
投稿を処理するアクションは次のようになります。
[HttpPost]
ActionResult MyAction(IList<MyObject> objects)
{
foreach (MyObject obj in objects)
{
if (obj.Checked)
{
// ...
}
else
{
// ...
}
}
return View();
}