在asp.net mvc中绑定缺少元素的数组

Jam*_*rth 12 asp.net asp.net-mvc asp.net-mvc-2

我试图将动态数组元素绑定到视图模型,其中html中可能缺少索引

例如,使用视图模型

class FooViewModel
{
   public List<BarViewModel> Bars { get; set; }
}

class BarViewModel
{
   public string Something { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和HTML

<input type="text" name="Bars[1].Something" value="a" />
<input type="text" name="Bars[3].Something" value="b" />
<input type="text" name="Bars[6].Something" value="c" />
Run Code Online (Sandbox Code Playgroud)

目前,酒吧将为空.我怎么能让模型绑定器忽略任何缺少的元素?即以上将绑定到:

FooViewModel
{
     Bars
     {
            BarViewModel { Something = "a" },
            BarViewModel { Something = "b" },
            BarViewModel { Something = "c" }
     }
}
Run Code Online (Sandbox Code Playgroud)

amu*_*rra 9

添加.Index作为您的第一个隐藏输入来处理无序元素,如Phil Haacked 博客文章中所述:

<input type="text" name="Bars.Index" value="" />
<input type="text" name="Bars[1].Something" value="a" />
<input type="text" name="Bars[3].Something" value="b" />
<input type="text" name="Bars[6].Something" value="c" />
Run Code Online (Sandbox Code Playgroud)

  • 非常接近,但是这个网址中接受的答案有一个更完整的解决方案:http://stackoverflow.com/questions/8598214/mvc3-non-sequential-indices-and-defaultmodelbinder (4认同)
  • @amurra 在 Haack 文章中他说要为每个字段使用单独的隐藏输入,因此似乎有必要。 (2认同)
  • 我可以确认在 MVC 5.2.3 中,每个字段都需要隐藏输入,并且值需要是正确的索引。 (2认同)