我正在开发一个ASP.NET MVC4应用程序。这个应用有一个基本的表单。我的表单的模型如下所示:
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>
当我发布表单时,模型中的记忆值始终为false。但是,模型中的Name属性具有值。我已经通过在以下代码中设置断点来测试这一点:
[HttpPost]
public ActionResult MyAction(MyModel model)
{
Console.WriteLine(model.Remember.ToString());
}
我想不出来。为什么没有设置复选框值?
发布于 2013-02-06 22:03:26
因为您使用的是Model.Name来设置值。我假设您正在向View传递一个空的视图模型。
因此,记住的值为false,并将checkbox元素上的值设置为false。这意味着当您选中复选框时,您将在表单中发送值"false“。当你没有选择它时,它不会被发布,所以模型缺省为false。这就是为什么你在这两种情况下都会看到一个错误的值。
只有在选中选择框时,才会传递该值。要在Mvc中使用复选框,请使用
@Html.CheckBoxFor(x => x.Remember)
或者,如果您不想将模型绑定到视图。
@Html.CheckBox("Remember")
Mvc使用一个隐藏字段来实现一些魔术,以便在值未被选中时持久化它们。
编辑,如果你真的不喜欢这样做,并且想自己生成元素,你可以这样做。
<input id="Remember" name="Remember" type="checkbox" value="true" @(Model.Remember ? "checked=\"checked\"" : "") />
发布于 2017-03-20 05:21:05
只使用这个
$("input[type=checkbox]").change(function () {
if ($(this).prop("checked")) {
$(this).val(true);
} else {
$(this).val(false);
}
});
发布于 2013-02-06 21:54:54
而不是
<input id="Remember" name="Remember" type="checkbox" value="@Model.Remember" />
使用:
@Html.EditorFor(x => x.Remember)
这将为您提供一个专门用于记住的复选框
https://stackoverflow.com/questions/14730746
复制相似问题