Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Html.CheckBoxFor循环_C#_Asp.net_Model View Controller_Web_Checkboxfor - Fatal编程技术网

C# 使用Html.CheckBoxFor循环

C# 使用Html.CheckBoxFor循环,c#,asp.net,model-view-controller,web,checkboxfor,C#,Asp.net,Model View Controller,Web,Checkboxfor,我想生成以下键入的复选框列表 当我检查每个复选框(如levelOne)时,我希望看到每个复选框都有一个唯一的ID和名称,如下所示 我有一个服务(ReplayService),它提供了一个对象列表(HierarchyLevels),用于创建复选框列表 public IEnumerable<HierarchyLevels> GetHierarchyLevels() { return new List<HierarchyLevels>()

我想生成以下键入的复选框列表

当我检查每个复选框(如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},

        };
    }
我的模型类为将要创建的每个复选框定义了属性

    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; }
    .....
    .....   
}
公共抽象类ReplayViewModelBase
{
公共IEnumerable层次结构级别{get;set;}
....
....
}
公共类ReplayByHierarchyLevels:ReplayViewModelBase
{
公共bool levelOne{get;set;}
公共布尔二级{get;set;}
公共布尔三级{get;set;}
公共布尔四级{get;set;}
.....
.....   
}
在我看来,我需要在层次结构列表中循环并生成一个复选框列表。我遇到的问题是,我不确定如何在对象列表中循环并在模型中指定唯一的bool属性。在下面的代码段中,我将bool属性“levelOne”分配给所有已创建的复选框(因此所有复选框都具有相同的ID和名称)

@foreach(Model.ReplayByHierarchyLevels.HierarchyLevels中的变量级别)
{
@级别.文本
@复选框(level.Text,level.Selected)
**@Html.CheckBoxFor(x=>x.ReplayByHierarchyLevels.levelOne,Model.ReplayByHierarchyLevels.levelOne=level.Selected)
}

就我个人而言,我只会绑定到
层次结构级别,因此复选框视图将是:

@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>
}
@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>
}
@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>
}
public class ReplayByHierarchyLevels : ReplayViewModelBase
{
    // be aware may be null
    public bool levelOne { get{return HierarchyLevels.FirstOrDefault(x => x.Text == "levelOne").Selected;} }

    // rest the same
}