web-dev-qa-db-ja.com

Razor ViewEngine HTML.Checkboxメソッドは、非表示の入力を作成します。どうして?

私のビューページに以下のコードを書いています。

@Html.CheckBox("ChxName",true)

そして、私は次の結果を得ました。

<input checked="checked" id="ChxName" name="ChxName" type="checkbox" value="true" />
<input name="ChxName" type="hidden" value="false" />

なぜチェックボックスと同じ名前の入力要素があるのですか?

37
tugberk

チェックされていないチェックボックスは投稿されないため、非表示フィールド(falseに設定)により、モデルバインディングは引き続き機能します。

ポストバックのRequest.Formを見てください。チェックボックスがオンの場合、次のように表示されます。

ChxName=true&ChxName=false

モデルバインダーは最初の値を使用します。

ボックスがチェックされていない場合は、次のように表示されます。

ChxName=false
49
ericvg

ericvgはそれをうまく説明しました。

手動のアプローチはこれです:

bool IsDefault = (Request.Form["IsDefault"] != "false");
3
Valamas

または、Contains( "true")を使用します。

bool myCheckBoxValue = Server.HtmlEncode(Request.QueryString["MyCheckBoxValue"]).Contains("true");
3
pfeds