1

我在将集合绑定到模型时遇到了一些问题。我按照这个链接创建了一个复选框列表。我不确定要提供多少代码,但我的观点有以下模型

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。并且当提交视图表单时,整个视图不显示。相反,我得到了一个带有第一个选中复选框名称的局部视图。当在这个集合中没有选择任何内容时,返回的视图提交好了。我尝试调试代码,但在此过程中没有任何中断。

我知道,这我可能没有足够地隔离这个问题,但这是我能做到的......

4

1 回答 1

1

那是因为您正在查看模型值而不是复选框的当前值。您需要更改它,首先,将您的复选框声明更改为 pass this,如下所示:

@Html.CheckBoxFor(m => m.third[i].chk, new {onchange="test(this)"})

然后稍微改变你的测试功能,成为:

function test(item){
    alert(item.checked)
}
于 2013-03-18T12:13:55.830 回答