HtmlHelper用于模型数组值

时间:2013-11-21 02:49:37

标签: asp.net-mvc arrays html-helper

我正在尝试将CheckBoxes列表绑定到我的模型的成员,该成员恰好是一个数组。我用过:

for (int i=0; i< ARRAYLENGTH; i++)
{
    @Html.CheckBoxFor(x => x.myArray[i])
}

但是在尝试绑定时它生成了'collection is read-only'错误。那么甚至可以使用CheckBoxFor帮助器为单个数组元素(它是模型的成员)呈现复选框吗?

1 个答案:

答案 0 :(得分:0)

1)MVC框架默认使用DefaultModelBinder类来根据发布的值构建模型。绑定集合时,它使用ICollection<T>接口并在使用已发布值填充集合之前调用Clear()方法。然后,调用Add()方法。

由于你有一个数组,Clear()方法实际上并没有清除任何内容(&#39;导致数组的大小固定),而是用默认值替换数组值(0表示数字,false表示布尔值,null参考类型)。

出于同样的原因(数组的固定大小)Add()方法会导致错误。

2)DefaultModelBinder适用于属性,而非字段。这就是为什么在将数组设为公共字段后未绑定值的原因。

解决方案是将您的媒体资源类型从数组更改为IList<YourType>List<YourType>IList<T>允许您在视图中使用[]语法。