我的应用程序中有一个复杂的对象,例如:
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 的列表中,但我想找到一个更好的解决方案。