在C#MVC 4中恢复复杂对象的复选框值

在C#MVC 4中恢复复杂对象的复选框值,c#,asp.net-mvc-4,checkbox,C#,Asp.net Mvc 4,Checkbox,我的应用程序中有一个复杂对象,类似于: public class ViewModel { public Link Object1 { get; set; } public List<Object2> L_Object2 { get; set; } public List<Object3> L_Object3 { get; set; } public List<Object4> L_Object4 { get; set; }

我的应用程序中有一个复杂对象,类似于:

public class ViewModel
{
    public Link Object1 { get; set; }
    public List<Object2> L_Object2 { get; set; }
    public List<Object3> L_Object3 { get; set; }
    public List<Object4> L_Object4 { get; set; }

    .
    .
    .
}
然后我将这个复杂对象传递给视图,并对
Object1B
列表执行
复选框,但是当我尝试恢复控制器中的值时,我无法获得复选框的值

所有其他参数都正常,我只能恢复复选框,为什么

如果我试图通过从视图获取FormCollection来恢复参数,我可以看到这些值

我的控制人签名:

public ActionResult Create(ViewModel vm, FormCollection collection)
有人能帮我理解为什么我不能在ViewModel对象中恢复它吗?我如何修复它以通过ViewModel对象恢复它

###更新1##

添加视图的代码,只是复选框部分:

@{
    int currentId = 0;
}
@for (int i = 0; i < Model.Object1.Object1B.Count(); i++)
{
    if (currentId != Model.Object1.Object1B[i].Id_Object2) // If Id changes, start a new group
    {
        currentId = Model.Object1.Object1B[i].Id_Object2;
        // DisplayTextFor here, to start new group
    }
    <label>@Html.CheckBoxFor(m => Model.Object1.Object1B[i].Status)
    // Next line is just to display the correct name
    @Html.DisplayTextFor(m => Model.Object1.FirstOrDefault(model => model.Id_Codigo == Model.Object1.Object1B[i].Id_Perfil).Descricao)</label>
    @Html.HiddenFor(m => Model.Object1.Object1B[i].Id_Object2)
    @Html.HiddenFor(m => Model.Object1.Object1B[i].Id_Object3)
    @Html.HiddenFor(m => Model.Object1.Object1B[i].Id_Object4, new { @value = 0})

}
@{
int currentId=0;
}
@for(int i=0;iModel.Object1.Object1B[i].Status)
//下一行只是显示正确的名称
@(m=>Model.Object1.FirstOrDefault(Model=>Model.Id\u Codigo==Model.Object1.Object1B[i].Id\u Perfil.descripcao)
@Html.HiddenFor(m=>Model.Object1.Object1B[i].Id\u Object2)
@Html.HiddenFor(m=>Model.Object1.Object1B[i].Id\u Object3)
@Html.HiddenFor(m=>Model.Object1.Object1B[i].Id_Object4,新的{@value=0})
}
###更新2##

我在ViewModel对象中创建了相同的对象列表,它运行良好。
目前,在我的行动中,我得到了这个列表并将其放入Object1B列表中,但是我想找到一个更好的解决方案

你能把CustomCheckBoxFor的代码贴出来吗?我猜它没有正确地将name属性添加到它生成的html中…@leebiley添加了代码。@leebiley原谅我。。。我没有使用CustomCheckBoxFor,只是一个简单的CheckBoxFor。我已经更新了问题以更正此问题。
public ActionResult Create(ViewModel vm, FormCollection collection)
@{
    int currentId = 0;
}
@for (int i = 0; i < Model.Object1.Object1B.Count(); i++)
{
    if (currentId != Model.Object1.Object1B[i].Id_Object2) // If Id changes, start a new group
    {
        currentId = Model.Object1.Object1B[i].Id_Object2;
        // DisplayTextFor here, to start new group
    }
    <label>@Html.CheckBoxFor(m => Model.Object1.Object1B[i].Status)
    // Next line is just to display the correct name
    @Html.DisplayTextFor(m => Model.Object1.FirstOrDefault(model => model.Id_Codigo == Model.Object1.Object1B[i].Id_Perfil).Descricao)</label>
    @Html.HiddenFor(m => Model.Object1.Object1B[i].Id_Object2)
    @Html.HiddenFor(m => Model.Object1.Object1B[i].Id_Object3)
    @Html.HiddenFor(m => Model.Object1.Object1B[i].Id_Object4, new { @value = 0})

}