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