C# 在MVC4中处理复选框值

C# 在MVC4中处理复选框值,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我在MVC视图中的表单中有一个复选框,如下所示: <div class="row" style="width: 98%;"> <div class="col-md-1" style="width: 22%;">Active</div> <div class="col-md-1" style="width: 23%;"> <input type="checkbox" ID="chb_Active" style="color: #

我在MVC视图中的表单中有一个复选框,如下所示:

<div class="row" style="width: 98%;">
  <div class="col-md-1" style="width: 22%;">Active</div>
  <div class="col-md-1" style="width: 23%;">
    <input type="checkbox" ID="chb_Active" style="color: #428bca;">
  </div>
  <div class="col-md-1" style="width: 22%;">Inactive</div>
  <div class="col-md-1" style="width: 23%;">
    <input type="checkbox" ID="chb_Inactive" style="color: #428bca;">
  </div>
  <div class="col-md-1" style="width: 20%;"></div>                          
</div>
这就是我处理所有其他控件(如dropdownlist)的方式,这些控件工作正常并获取选定的值

问题出现在复选框值上,它们总是设置为False,即使我选中或取消选中它们,它们总是返回False

我是MVC新手,请帮助我或为我指出正确的方向。我尝试过没有表单收集和表单仍然没有积极的结果


大多数与此相关的档案在这种情况下都没有帮助,因为它们的复选框中都有值

表单输入不是在
id
属性上拾取的,而是在
name
属性上拾取的

将输入更改为:

<input type="checkbox" name="chb_Active" ...
看来你现在可以做了

@model ProjectName.ViewModels.ControllerName.MethodNameViewModel

<div class="row" style="width: 98%;">
    <div class="col-md-1" style="width: 22%;">
        @Html.DisplayNameFor(x => x.Active)
    </div>
    <div class="col-md-1" style="width: 23%;">
        @Html.EditorFor(x => x.Active, new { style = "color: #428bca" })
    </div>

    @* Same for other field *@

这里有两个问题:

首先,HTML输入需要一个
name
属性,而不仅仅是
id
,因为它是表单集合中用作键的名称

其次,他们需要一个价值观。这是一个棘手的问题,也是复选框的一个古老问题。默认情况下,如果选中复选框,浏览器将提交与该复选框关联的值,如果未选中,则不会提交任何内容。因此,要使复选框在选中时提交
true
,在未选中时提交
false
,您需要执行以下操作:

<input type="checkbox" ID="chb_Active" name="chb_Active" value="true" style="color: #428bca;">
<input type="hidden" name="chb_Active" value="false">

我认为你的插入编辑下一个更好的方式来做这是一个很好的答案,但原来的答案,在此之前,是误导。简单地将name属性添加到OP的原始代码中并不能解决问题,您也没有解释why@BenGriffiths啊,刚看完你的答案,我明白你的意思了。我会在我的答案中添加你的参考:)谢谢你,这有效了…很抱歉没有及时接受答案。他不在办公室。
@model ProjectName.ViewModels.ControllerName.MethodNameViewModel

<div class="row" style="width: 98%;">
    <div class="col-md-1" style="width: 22%;">
        @Html.DisplayNameFor(x => x.Active)
    </div>
    <div class="col-md-1" style="width: 23%;">
        @Html.EditorFor(x => x.Active, new { style = "color: #428bca" })
    </div>

    @* Same for other field *@
[HttpPost]
public ActionResult MethodName(MethodNameViewModel methodNameViewModel) 
{
    var active = methodNameViewModel.Active;
    var inactive = methodNameViewModel.Inactive

    // ... etc
 }
<input type="checkbox" ID="chb_Active" name="chb_Active" value="true" style="color: #428bca;">
<input type="hidden" name="chb_Active" value="false">
public ActionResult MethodName(string submit, bool chb_Active) {
    // ...
}