我在将集合绑定到模型时遇到了一些问题。我按照this link创建了一个复选框列表。我不确定要提供多少代码,但我的观点有以下模型
Public class Model1{
public string param1{get; set;}
public string param2{get; set;}
}
Public class Model2{
public string param1{get; set;}
public string param2{get; set;}
}
Public class Model3: Model2{
public bool chk {get; set;}
public list<string> param{get; set;}
public Model3()
{
param = new List<string>(){"one", "two", "three"};
}
}
public class superModel{
public Model1 first{get; set;}
public IEnumerable<Model2> second{get; set;}
public List<Model3> third{get; set;}
}
在我的控制器中,我已将参数第三个定义为
third = AnEnumerableList.Select( e=> new Model3{chk=false, param1 = e.Param, param2 = e.Param1}).ToList();
在我看来,我传递了持有我所有类模型的超模。我创建了一个像这样的复选框:
for(int i=0; i<Model.third.Count; i++){
@Html.CheckBoxFor(m => m.third[i].chk, new {onchange="test()"})
@Html.HiddenFor(m => m.third[i].param)
@Html.HiddenFor(m => m.third[i].param1)
@Html.HiddenFor(m => m.third[i].param2)
}
javascript看起来像
function test(){
alert('@Model.third[0].chk')
}
当我查看生成的源代码时,一切看起来都很好,但无论是否选中该复选框,javascript代码始终返回false。提交视图表单时,整个视图不会显示。相反,我得到一个局部视图,其中包含第一个选中复选框的名称。如果在此集合中未选择任何内容,则返回的视图将正常提交。我试图调试代码,但在此过程中没有任何中断。
我知道,我可能没有足够的这个问题,但这是我能尽可能多的...
答案 0 :(得分:1)
那是因为您正在查看模型值和不复选框的当前值。您需要更改它,首先,将复选框声明更改为this
,如下所示:
@Html.CheckBoxFor(m => m.third[i].chk, new {onchange="test(this)"})
然后稍微更改您的测试功能:
function test(item){
alert(item.checked)
}