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

私のコントローラーでは、パラメーター3番目を次のように定義しました

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 に答える