在ASP.NET MVC Action中获取Checkbox值

时间:2015-09-26 07:32:06

标签: c# asp.net asp.net-mvc

我正在使用ASP.NET MVC应用程序。我的表单的模型如下所示:

public class ViewModel
{
    public bool IsActive { get; set; }
}

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

<label class="checkbox pull-left">
   <input type="checkbox" id="IsActive" name="IsActive" data-val="true" data-val-required="The IsActive field is required.">
   <i></i>Active/Deactive
   <input name="IsActive" type="hidden">
</label>

当我发布表单时,模型中的IsActive值始终为false。但是,模型中的Name属性具有值。我通过在下面设置断点来测试这个:

[HttpPost]
public ActionResult MyAction(ViewModel model)
{
    // model.IsActive always is false
}

为什么Checkbox值没有设置?

我该怎么做才能解决这个问题?

3 个答案:

答案 0 :(得分:5)

您没有在复选框或其关联的隐藏输入中设置value属性,因此不会发布任何值,并且您的属性值是其默认值(false)。它必须是

<label class="checkbox pull-left">
    <input type="checkbox" id="IsActive" name="IsActive" value="true" ....>
    <i></i>Active/Deactive
    <input name="IsActive" type="hidden" value="false">
</label>

附注:您是否有任何理由不使用@Html.CheckBoxFor(m => m.IsActive)生成正确的HTML?

答案 1 :(得分:1)

您必须设置复选框的值attr才能获取值。

  

data-val是不同的,不用作HTML或MVC中的值attr

答案 2 :(得分:0)

我建议您使用剃刀和@Html.CheckBoxFor(m => m.IsActive)