0

ビューにチェックボックスのリストの2つのセットを生成しようとしています。それはすべて Post アクションとは別に機能します。送信時に、ParentViewModel が ChildViewModel を適切にバインドしていません。FirstCheckboxList モデル。SecondCheckboxList 上記の両方が null になります。

何が欠けているのかわかりません。これに関するヘルプは素晴らしいでしょう。前もって感謝します。

CheckboxItems.cshtml

@model List<CheckboxItem>
@{        
    for (int i = 0; i < Model.Count(); i++)
    {
       <div>
       @Html.CheckBoxFor(x => x.ElementAt(i).Checked, new { @id = Model.ElementAt(i).Id, onclick = "GetValue()" })
          <span id="Padded">@Model.ElementAt(i).Text</span>
       </div> 
    }
}

MainView.cshtml

 @Html.BeginForm(){     
       @Html.EditorFor(m=> m.FirstCheckboxList,"CheckboxItems") 
       @Html.EditorFor(m=> m.SecondCheckboxList, "CheckboxItems")                
 }
 @Html.TextBoxFor(m => m.FSelected, new Dictionary<string,object>() {{"readonly",true}})       
 @Html.TextBoxFor(m => m.FUniverse,new Dictionary<string,object>() {{"readonly",true}})
        <input type="submit" name="nextBtn" value ="Next" />
 }

ParentViewModel

public class ParentViewModel
{       
    public int PId { get; set; }
    public IEnumerable<CheckboxItem> FirstCheckboxList{ get; set; }
    public IEnumerable<CheckboxItem> SecondCheckboxList{ get; set; }
    public Int64 FSelected { get; set; }
    public Int64 FUniverse { get; set; }
}

CheckboxItem : 子ビュー モデル

 public class CheckboxItem
  {
    public int Id { get; set; }
    public string Text { get; set; }
    public bool Checked { get; set; }
  }

コントローラーアクション

   [HttpPost]
    public ActionResult MyCheckboxView(int planid,   ParentViewModel model, string nextBtn)
    {
        // do something
        return View(Model);
    }
4

1 に答える 1

1

の代わりにParentViewModelを使用するようにビューモデルを変更してみてください:List<CheckboxItem>IEnumerable<CheckboxItem>

public class ParentViewModel
{       
    public int PlanId { get; set; }
    public List<CheckboxItem> FirstCheckboxList{ get; set; }
    public List<CheckboxItem> SecondCheckboxList{ get; set; }
    public Int64 FSelected { get; set; }
    public Int64 FUniverse { get; set; }
}

モデル バインダーは、指定されたインデックスで要素を正しくバインドできるように、Listまたは のようなデータ構造を必要とします。は単なるインターフェースであり、このようなインデックスはサポートしていません。ArrayIEnumerable

編集

また、補足として、forMVC がこれらすべてを実行できるため、EditorTemplate のループを気にする必要はありません。モデル タイプを に変更し@model CheckboxItem、ループを削除してid属性を削除すると、次のようになります。

@model CheckboxItem
@{        

   <div>
   @Html.CheckBoxFor(x => x.Checked, new { onclick = "GetSelectedFrame()" })
      <span id="Padded">@Model.Text</span>
   </div> 
    }
}

また、EditorForこれは「MVC マジック」を台無しにするため、呼び出しで EditorTemplate の名前が提供されていないことを確認してください (テンプレート名なしでリストを自動的に反復し、テンプレート名を使用しないことを説明するこの質問を参照しください)。

@Html.BeginForm(){ 
    @Html.EditorFor(m=> m.FirstCheckboxList) 
    @Html.EditorFor(m=> m.SecondCheckboxList) 
} 
于 2013-04-29T15:36:09.067 に答える