一般的なリストについてのあなたの質問は非常に誤解を招くものであり、それはあなたの本当の問題とは何の関係もないのではないかと思います。
ビュー内でチェックボックスを生成した方法に応じて、可能かどうかが決まります。<input type="checkbox">
チェックされていないチェックボックスのタグ値を直接使用してハードコーディングした場合、サーバーに送信されることはありません。これがHTMLチェックボックスの仕組みです。この場合、すべての値を取得することはできません。一方、Html.CheckBoxFor
ヘルパーを使用してそれらを生成した場合、このヘルパーがすべての値を送信するために各チェックボックスに非表示のフィールドを追加することに気付くでしょう。ただし、このヘルパーはブール値で動作します。
したがって、2つのプロパティを含むビューモデルを作成することをお勧めします。1つは目的の値を保持し、もう1つはユーザーがビューでこの値を選択したかどうかを示すブールプロパティです。
public class ItemViewModel
{
public string Value { get; set; }
public bool Checked { get; set; }
}
次に、これらのアイテムのコレクションを含むビューモデルを作成します。
public class MyViewModel
{
public ItemViewModel[] Items { get; set; }
}
これで、ビュー内でこれらの値を次のようにレンダリングできます。
@model MyViewModel
@using (Html.BeginForm())
{
for ( var i = 0; i < Model.Items.Length; i++)
{
<div>
@Html.CheckBoxFor(x => x.Items[i].Checked)
@Html.HiddenFor(x => x.Items[i].Value)
</div>
}
<button type="submit">OK</button>
}
そして最後に、このフォームが送信されるコントローラーアクション内で、すべての値を取得できるようになります。
[HttpPost]
public ActionResult SomeAction(MyViewModel model)
{
foreach (var item in model.Items)
{
// here you could use item.Checked and item.Value
}
...
}