非連続的なArray要素をModelにバインドする(ASP.NET MVC)
問題
JSで特定の条件のときのみ、入力項目を表示&その入力項目は配列である場合、 nameに宣言されている配列の順番が途切れ途切れになってしまい、上手くModelに格納されないことがあった。
解決方法
参考サイトの回答にあるように<input type=“text” name=“Items[0].Name">の手前に<input type="hidden” name=“Items.Index” value=“0” />を宣言することで非連続的なindexを持っている配列の値でも上手くModelに格納することが出来た。
参考サイトはMVC3の回答だけど、今のところMVC5でも問題なく動く。
View
<input type="hidden" name="Items.Index" value="0" /> <input type="text" name="Items[0].Name" value="someValue1" /> <input type="hidden" name="Items.Index" value="1" /> <input type="text" name="Items[1].Name" value="someValue2" /> <input type="hidden" name="Items.Index" value="3" /> <input type="text" name="Items[3].Name" value="someValue3" /> <input type="hidden" name="Items.Index" value="4" /> <input type="text" name="Items[4].Name" value="someValue4" />
Model
public class TestModel { public List<Item> Items { get; set; } } public class Item { public string Name{ get; set; } }