在ASP.NET MVC POST中绑定IEnumerable的模型?

将IEnumerable类型的模型绑定到MVC POST是否有任何问题?

我的模型中的某些属性未绑定到操作的post。 似乎模型上的属性就像字符串一样好,但我的IEnumerable是没有绑定的。

这是我的代码片段:

 m.ResponseInfo.SubsetInfo.Test) %> <% for (int i = 0; i   m.ResponseInfo.SubsetInfo.BandAvailabilities.ToArray()[i].BandName) %>  

以下是模型中这些属性的外观:

 public IEnumerable BandAvailabilities { get; set; } public string Test { get; set; } 

视图工作正常,并输出一个文本框列表,其中包含预期值。 但是被解雇的post只会将Test字符串识别为属性。 模型状态也不包含我的IEnumerable数据。

模型绑定取决于生成的html的外观。 对于你的特定场景,正确绑定html应该是这样的

    . .  

我没有尝试过,但我几乎可以肯定,在循环中调用ToArray方法会阻止系统为嵌套输入生成适当的名称。 您可以采取一些措施来解决这个问题首先,在您的视图模型更改中

 public IEnumerable BandAvailabilities { get; set; } 

 public IList BandAvailabilities { get; set; } //or Array 

因此,您不必在循环中调用ToArray方法,并为输入生成专有名称。 其次,制作一个编辑器模板并将其放在编辑器模板文件夹中,位于当前控制器下或共享文件夹的编辑器模板文件夹中。 使此视图接受BandAvailabilityInfo类型的模型,此视图的名称也应为BandAvailabilityInfo 。 然后在主视图中你只需要替换整个循环

  <%: Html.EditorFor(m => m.ResponseInfo.SubsetInfo.BandAvailabilities%> 

和rest将由框架本身处理

它适用于IEnumarble类型。
我认为问题是你在For循环中写的ToArray 。 (这也非常有效)
for循环更改for foreach

看到这个优秀的答案如何实现它。