我正在尝试将CheckBoxes列表绑定到我的模型的成员,该成员恰好是一个数组。我用过:
for (int i=0; i< ARRAYLENGTH; i++)
{
@Html.CheckBoxFor(x => x.myArray[i])
}
但是在尝试绑定时它生成了'collection is read-only'错误。那么甚至可以使用CheckBoxFor帮助器为单个数组元素(它是模型的成员)呈现复选框吗?
答案 0 :(得分:0)
1)MVC框架默认使用DefaultModelBinder
类来根据发布的值构建模型。绑定集合时,它使用ICollection<T>
接口并在使用已发布值填充集合之前调用Clear()
方法。然后,调用Add()
方法。
由于你有一个数组,Clear()
方法实际上并没有清除任何内容(&#39;导致数组的大小固定),而是用默认值替换数组值(0表示数字,false表示布尔值,null参考类型)。
出于同样的原因(数组的固定大小)Add()
方法会导致错误。
2)DefaultModelBinder
适用于属性,而非字段。这就是为什么在将数组设为公共字段后未绑定值的原因。
解决方案是将您的媒体资源类型从数组更改为IList<YourType>
或List<YourType>
。 IList<T>
允许您在视图中使用[]语法。