私のビューページに以下のコードを書いています。
@Html.CheckBox("ChxName",true)
そして、私は次の結果を得ました。
<input checked="checked" id="ChxName" name="ChxName" type="checkbox" value="true" />
<input name="ChxName" type="hidden" value="false" />
なぜチェックボックスと同じ名前の入力要素があるのですか?
チェックされていないチェックボックスは投稿されないため、非表示フィールド(falseに設定)により、モデルバインディングは引き続き機能します。
ポストバックのRequest.Formを見てください。チェックボックスがオンの場合、次のように表示されます。
ChxName=true&ChxName=false
モデルバインダーは最初の値を使用します。
ボックスがチェックされていない場合は、次のように表示されます。
ChxName=false
ericvgはそれをうまく説明しました。
手動のアプローチはこれです:
bool IsDefault = (Request.Form["IsDefault"] != "false");
または、Contains( "true")を使用します。
bool myCheckBoxValue = Server.HtmlEncode(Request.QueryString["MyCheckBoxValue"]).Contains("true");