剃刀复选框不能按预期工作

时间:2016-02-18 15:02:23

标签: asp.net-mvc razor

应用程序中有剃须刀复选框控件需要为每个集合重复。但是对于第二个以后的集合号,代码下面没有任何内容作为复选框的值:

<div class="checkbox">
    <label class="checkbox-inline">
        @Html.CheckBoxFor(m => m.Collection[i].Item)Some Label
    </label>
</div>

viewmodel是:

public class Items{ 
   public List<Collection> Collection{get; set;}
}
public class Collection{
    public bool Item { get; set; }
}

2 个答案:

答案 0 :(得分:1)

假设您的HttpPost操作参数是

的对象
[HttpPost]
public ActionResult Create(Items model)
{
   //to do : Save and Redirect
}

您需要确保表单中的复选框具有与ViewModel属性层次结构匹配的名称。因此,要使模型绑定起作用,您需要使用名称为

的复选框
<input  name="Collection[1].Item" type="checkbox" >

所以在你看来,确保你操纵这个名字

@model Items
@using (Html.BeginForm())
{

    for (int index = 0; index < Model.Collection.Count; index++)
    {
        var collection = Model.Collection[index];
        @Html.CheckBox("Collection["+index+"].Item",collection.Item)
    }
    <input type="submit"/>

}

另一个(更好)选项是使用编辑器模板。使用此方法,您无需操作表单字段名称。 Here是一个完整的帖子,逐步解释

答案 1 :(得分:0)

  

而不是选择项目写入

<div class="checkbox">
   <label class="checkbox-inline">
     @Html.CheckBoxFor(m => m.Collection[i].selected)Some Label
    </label>
</div>
  

或试试这个

 @Html.CheckBoxFor(m => m[i].Checked,new {Style ="vertical-align})