首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ASP.NET MVC 4中获取复选框值

在ASP.NET MVC 4中获取复选框值
EN

Stack Overflow用户
提问于 2013-02-06 21:52:08
回答 16查看 315.3K关注 0票数 128

我正在开发一个ASP.NET MVC4应用程序。这个应用有一个基本的表单。我的表单的模型如下所示:

代码语言:javascript
复制
public class MyModel
{
    public string Name { get; set; }
    public bool Remember { get; set; }
}

在我的表单中,我有以下HTML。

代码语言:javascript
复制
<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>

当我发布表单时,模型中的记忆值始终为false。但是,模型中的Name属性具有值。我已经通过在以下代码中设置断点来测试这一点:

代码语言:javascript
复制
[HttpPost]
public ActionResult MyAction(MyModel model)
{
  Console.WriteLine(model.Remember.ToString());
}

我想不出来。为什么没有设置复选框值?

EN

回答 16

Stack Overflow用户

发布于 2013-02-06 22:03:26

因为您使用的是Model.Name来设置值。我假设您正在向View传递一个空的视图模型。

因此,记住的值为false,并将checkbox元素上的值设置为false。这意味着当您选中复选框时,您将在表单中发送值"false“。当你没有选择它时,它不会被发布,所以模型缺省为false。这就是为什么你在这两种情况下都会看到一个错误的值。

只有在选中选择框时,才会传递该值。要在Mvc中使用复选框,请使用

代码语言:javascript
复制
@Html.CheckBoxFor(x => x.Remember)

或者,如果您不想将模型绑定到视图。

代码语言:javascript
复制
@Html.CheckBox("Remember")

Mvc使用一个隐藏字段来实现一些魔术,以便在值未被选中时持久化它们。

编辑,如果你真的不喜欢这样做,并且想自己生成元素,你可以这样做。

代码语言:javascript
复制
<input id="Remember" name="Remember" type="checkbox" value="true" @(Model.Remember ? "checked=\"checked\"" : "") />
票数 73
EN

Stack Overflow用户

发布于 2017-03-20 05:21:05

只使用这个

代码语言:javascript
复制
$("input[type=checkbox]").change(function () {
    if ($(this).prop("checked")) {
        $(this).val(true);
    } else {
        $(this).val(false);
    }
});
票数 15
EN

Stack Overflow用户

发布于 2013-02-06 21:54:54

而不是

代码语言:javascript
复制
 <input id="Remember" name="Remember" type="checkbox" value="@Model.Remember" />

使用:

代码语言:javascript
复制
 @Html.EditorFor(x => x.Remember)

这将为您提供一个专门用于记住的复选框

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14730746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档