在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
。
看到这个优秀的答案如何实现它。