5

次のコード行を含むビューがあります。

//(DaysOfWeek is a bool[])
@Html.CheckBoxFor(m => m.Data.DaysOfWeek[0])

それはfalseとして始まります。ユーザーがボックスを「チェック」して戻ると、trueとfalseの両方の値が返されます。

フォームデータの一部として返されるものは次のとおりです

Data.DaysOfWeek[0]:true
Data.DaysOfWeek[0]:false

なぜそれをしているのですか?

4

1 に答える 1

6

これは、標準のHTMLチェックボックスがオフの場合、値を返さないためです。この厄介な動作をより直感的にするために、このメソッドは、次のようなCheckBoxFor値を持つ同じ名前のチェックボックスと非表示のコントロールを作成します。false

<input type="checkbox" name="myControl" value="True" /> My control
<input type="hidden" name="myControl" value="False" />

フォームが投稿されたときに表示されるのは次のいずれかです。

False // checkbox unchecked
True,False // checkbox was checked

したがって、ボックスがチェックされているかどうかをテストするには、次を使用する必要がありますContains('True')

bool checkboxChecked = formCollection["myControl"].Contains("True");
于 2012-08-04T20:14:58.160 に答える