私は 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"> Remember Me?</label>
フォームを投稿すると、モデルの Remember 値は常に false になります。ただし、モデルの Name プロパティには値があります。次の場所にブレークポイントを設定してこれをテストしました。
[HttpPost]
public ActionResult MyAction(MyModel model)
{
Console.WriteLine(model.Remember.ToString());
}
わかりません。チェックボックスの値が設定されないのはなぜですか?
ベストアンサー1
@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" />
チェックされている場合、常にデフォルト値が送信されます。