1. ホーム
  2. c#

[解決済み] ASP.NET MVC 4でチェックボックスの値を取得する

2022-07-10 18:08:38

質問

ASP.NET MVC 4のアプリに取り組んでいます。このアプリには、基本的なフォームがあります。私のフォームのモデルは次のようなものです。

public class MyModel
{
    public string Name { get; set; }
    public bool Remember { get; set; }
}

私のフォームでは、以下のようなHTMLになっています。

<input id="Name" name="Name" type="text" value="@Model.Name" />
<input id="Remember" name="Remember" type="checkbox" value="@Model.Remember" />
<label for="Remember">&nbsp;Remember Me?</label>

フォームを投稿すると、モデルのRememberの値は常にfalseになっています。しかし、モデルのNameプロパティは値を持っています。以下のようにブレークポイントを設定してテストしています。

[HttpPost]
public ActionResult MyAction(MyModel model)
{
  Console.WriteLine(model.Remember.ToString());
}

どうしてもわからないんです。なぜCheckboxの値が設定されないのでしょうか?

どうすれば解決しますか?

@Html.EditorFor(x => x.Remember)

生成されます。

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

どのように動作するのか

  • もし checkbox がチェックされていない場合、フォームが送信するのは hidden の値 (false) だけを送信します。
  • チェックした場合、フォームは2つのフィールド(falseとtrue)を送信し、MVCはこれらのフィールドに true を設定し、モデルの bool プロパティを指定します。

<input id="Remember" name="Remember" type="checkbox" value="@Model.Remember" />

これはチェックすると、常にデフォルト値を送信します。