2015-09-26 65 views
3

我正在开发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。但是,模型中的名称属性具有值。我已经通过在下面设置了一个断点来测试它:

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

为什么Checkbox值没有设置?

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

回答

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

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

数据-VAL是不同的,以HTML不作为值:attr或MVC

0

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

+1

通常在第一次尝试本身时详细说明答案,或者OP稍后会问你同样的问题...... – displayName