我想生成下面的键入复选框列表
当我检查每个复选框(例如 levelOne)时,我希望看到每个复选框都有一个唯一的 ID 和名称,如下所示
我有一个服务 (ReplayService),它提供了一个对象列表 (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},
};
}
我的控制器类使用 HierarchyLevels 列表(由服务创建)创建 IEnumerable 类型的新对象 viewModel.HierarchyLevels(在模型中)
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; }
.....
.....
}
在我的视图中,我循环遍历 HierarchyLevels 列表并生成复选框列表。我遇到的问题是我不确定如何遍历对象列表并在模型中分配一个唯一的 bool 属性。在下面的代码片段中,我将布尔属性“levelOne”分配给所有创建的复选框(结果都具有相同的 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>
}