0

我的应用程序中有一个复杂的对象,例如:

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; }

    .
    .
    .
}

Object1 具有以下结构:

public class Object1
{
    public List<Object1B> L_Perfil;
    // Some other irrelevant params here
}

然后是 Object1B:

public class SistemaPerfilLink
{
    public int Id_Object2 { get; set; }
    public int Id_Object3 { get; set; }
    public int Id_Object4 { get; set; }
    public bool Status { get; set; }
}

然后我将这个复杂的对象传递给视图,并CheckboxFor为列表做一个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})

}

## 更新 2 ##

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

4

0 回答 0