UPDATE:原来我跳过了一个复选框(4),如代码中所示。愚蠢的错误从我身边!MVC3将复选框值的布尔型数组传递给控制器
我在我的视图中有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>
下面是在控制器中的调试程序的屏幕截图(应该是布尔[16]):
我测试与使用Html.EditorFor的整数数组一样,它工作得很好。
谢谢!
UPDATE:
所以我最后做的是设置这些隐藏字段是这样的:
@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个工作。
使用foreach循环。我不知道它是否能解决您的问题,但它更优雅。 – 2012-07-30 14:01:15
你有GOT在开玩笑,真的解决了问题!干杯。 – 2012-07-30 14:08:06
哇!如果你的代码不优雅,asp.net mvc真的会插入隐藏的错误:) – 2012-07-30 14:23:49