2017-07-16 4 views
0

でループI iは、各チェックボックス(例えばlevelOne)を検査したとき、私はそれぞれのようなユニークなIDと名前を持つ見たいと思って入力されたチェックボックスHtml.CheckBoxFor

enter image description here

の下のリストを作成したいです

enter image description here

の下に私がチェックボックス

のリストを作成するために使用されるオブジェクト(HierarchyLevels)のリストを提供するサービス(リプレイサービス)を持っていますタイプの
 public IEnumerable<HierarchyLevels> GetHierarchyLevels() 
    { 
     return new List<HierarchyLevels>() 
     { 
      new HierarchyLevels{Name="LevelOne",ShortName="L1", IsSelected = false}, 
      new HierarchyLevels{Name="LevelTwo",ShortName="L2", IsSelected = false}, 
      new HierarchyLevels{Name="TLevelThree",ShortName="L3", IsSelected = false}, 
      new HierarchyLevels{Name="LevelFour",ShortName="L4", IsSelected = false}, 

     }; 
    } 

私のコントローラクラス(モデルでは)新しいオブジェクトviewModel.HierarchyLevelsを作成するために、(サービスによって作成された)HierarchyLevelsのリストを使用してIEnumerable

 public ActionResult Index() 
    { 
     var vm = new MyViewModel(); 
     PopulateViewModel(vm.viewModel); 
     return View(viewModel); 
    } 

    private void PopulateViewModel(ContentReplayViewModelBase viewModel) 
    { 
     var hierarchyLevels = replayService.GetHierarchyLevels(); 
     viewModel.HierarchyLevels = hierarchyLevels.Select(h => new SelectListItem {Text = h.Name, Selected = h.IsSelected}).ToArray(); 
    } 

私のモデルクラスはのプロパティを定義していますそれぞれのチェックボックスが作成されます。

public abstract class ReplayViewModelBase 
{ 
    public IEnumerable<SelectListItem> HierarchyLevels { get; set; } 
    .... 
    .... 
} 

public class ReplayByHierarchyLevels : ReplayViewModelBase 
{ 
    public bool levelOne { get; set; } 
    public bool leveltwo { get; set; } 
    public bool levelThree { get; set; } 
    public bool levelFour { get; set; } 
    ..... 
    ..... 
} 

私のView iでは、HierarchyLevelsのリストをループし、チェックボックスのリストを生成します。私が抱えている問題は、オブジェクトのリストをどのようにループしてモデルに一意のboolプロパティを割り当てるかわからないということです。私はすべての作成チェックボックス(結果として、すべてが同じIDと名前を持っている)

@foreach (var level in Model.ReplayByHierarchyLevels.HierarchyLevels) 
{ 
    <tr> 
     <td>@level.Text</td> 
     <td>@Html.CheckBox(level.Text, level.Selected)</td> 
     <td>** @Html.CheckBoxFor(x => x.ReplayByHierarchyLevels.levelOne, Model.ReplayByHierarchyLevels.levelOne = level.Selected)</td> 
    </tr> 
} 

答えて

1

個人的にブール値のプロパティ「levelOne」を割り当てています以下のコードでは、私はちょうどHierarchyLevelsに結合し、そうでしょうチェックボックスの表示は次のようになります。

@for(int i =0; i < Model.ReplayByHierarchyLevels.HierarchyLevels.Count; i++) 
{ 
    <tr> 
     <td>@Model.ReplayByHierarchyLevels.HierarchyLevels[i].Text</td> 
     <td> 
      @Html.CheckBoxFor(m => m.ReplayByHierarchyLevels.HierarchyLevels[i].Selected) 
      @Html.HiddenFor(m => m.ReplayByHierarchyLevels.HierarchyLevels[i].Text) 
      @Html.HiddenFor(m => m.ReplayByHierarchyLevels.HierarchyLevels[i].Value) 
     </td> 
    </tr> 
} 

あなたがアクセスの強いタイプをしたい場合は、その後、あなたがするビューモデルReplayByHierarchyLevelsを変更することができます:

public class ReplayByHierarchyLevels : ReplayViewModelBase 
{ 
    // be aware may be null 
    public bool levelOne { get{return HierarchyLevels.FirstOrDefault(x => x.Text == "levelOne").Selected;} } 

    // rest the same 
} 
関連する問題