更新:从代码中可以看出,我跳过了一个复选框 (4)。我这边的愚蠢错误!
我的视图中有 16 个复选框,我希望它们中的每一个都绑定到模型中布尔数组(或 BitArray)中的一个元素。
如果我尝试这样做,在提交表单后,控制器只会获取数组的前 4 个元素(虽然是正确的值),所以我尝试在模型的构造函数中分配更多空间,但控制器永远不会得到叫。有什么办法可以让它工作,还是每个复选框都需要一个布尔变量?
数组:
public bool[] ActiveSettings { get; set; }
看法:
<p><b>Active Settings:</b></p>
<div style="float:left">
@Html.CheckBoxFor(model => model.NetworkSettings.ActiveSettings[0]) val0<br />
@Html.CheckBoxFor(model => model.NetworkSettings.ActiveSettings[1]) val1<br />
@Html.CheckBoxFor(model => model.NetworkSettings.ActiveSettings[2]) val2<br />
@Html.CheckBoxFor(model => model.NetworkSettings.ActiveSettings[3]) val3<br />
@Html.CheckBoxFor(model => model.NetworkSettings.ActiveSettings[5]) val4<br />
@Html.CheckBoxFor(model => model.NetworkSettings.ActiveSettings[6]) val5<br />
@*etc..*@
</div>
这是控制器中调试器的屏幕截图(应该是 bool[16]):
我使用 Html.EditorFor 用整数数组测试了同样的东西,它工作得很好。
谢谢!
更新:
所以我最终做的是像这样设置这些隐藏字段:
@Html.CheckBoxFor(model => model.NetworkSettings.ActiveSettings[0]) val0<br />
@Html.Hidden("NetworkSettings.ActiveSettings[0]",false)
@Html.CheckBoxFor(model => model.NetworkSettings.ActiveSettings[1]) val1<br />
@Html.Hidden("NetworkSettings.ActiveSettings[1]",false)
等等......
不过,这是一个奇怪的注释:我有 16 个复选框,我所要做的就是为前 5 个设置隐藏字段,然后神奇地所有 16 个都起作用了。