更新: コードからわかるように、1 つのチェックボックス (4) をスキップしたことが判明しました。私の側からのばかげた間違い!
ビューに 16 個のチェックボックスがあり、それぞれをモデル内の bool 配列 (または BitArray) の要素にバインドします。
これを実行しようとすると、フォームを送信した後、コントローラーは配列の最初の 4 つの要素 (ただし正しい値) のみを取得するため、モデルのコンストラクターでより多くのスペースを割り当てようとしましたが、コントローラーは取得さえしませんでした。呼ばれた。これを機能させる方法はありますか、またはチェックボックスごとに bool 変数が必要ですか?
配列:
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個すべてが機能しました。