読者です 読者をやめる 読者になる 読者になる

IT業界のすみっこ暮らし

ふと気がついたときの記録

非連続的なArray要素をModelにバインドする(ASP.NET MVC)

参考サイト stackoverflow.com

問題

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; }
    }