Asp.net mvc 3 Net MVC 3多个复选框列表

Asp.net mvc 3 Net MVC 3多个复选框列表,asp.net-mvc-3,viewmodel,checkboxlist,mvc-editor-templates,Asp.net Mvc 3,Viewmodel,Checkboxlist,Mvc Editor Templates,我正在开发一个ASP.NETMVC3Web应用程序,最近我发布了一个关于如何显示复选框列表的问题 <h3>@Model.specialtyName.description</h3> @Html.EditorFor(m => m.SubSpecialityList) 多亏了卢布福德和达林·迪米特罗夫的帮助,我才得以实现这一目标 这对于一个复选框列表非常有效,但是,我现在需要能够在同一视图上显示多个复选框列表,即,请参见所附图像 我当前用于显示一个列表的ViewM

我正在开发一个ASP.NETMVC3Web应用程序,最近我发布了一个关于如何显示复选框列表的问题

<h3>@Model.specialtyName.description</h3>
@Html.EditorFor(m => m.SubSpecialityList)

多亏了卢布福德和达林·迪米特罗夫的帮助,我才得以实现这一目标

这对于一个复选框列表非常有效,但是,我现在需要能够在同一视图上显示多个复选框列表,即,请参见所附图像

我当前用于显示一个列表的ViewModels如下所示:

public class ViewModelShiftSubSpecialties
{

    public ListItem specialtyName { get; set; }
    public IEnumerable<ViewModelCheckBox> SubSpecialityList { get; set; }

}

public class ViewModelCheckBox
{
    public string Id { get; set; }
    public string Name { get; set; }
    public bool Checked { get; set; }
}
public类ViewModelShiftSubSpecialties
{
公共ListItem specialtyName{get;set;}
公共IEnumerable子专业列表{get;set;}
}
公共类ViewModelCheckBox
{
公共字符串Id{get;set;}
公共字符串名称{get;set;}
公共布尔检查{get;set;}
}
在我的控制器中,我填充ViewModelShiftSubspecial,如下所示:

var subSpecialties = GetSubSpecialtiesForSpecialty(5);

        ViewModelShiftSubSpecialties viewModel = new ViewModelShiftSubSpecialties();

        var checkBoxList = new List<ViewModelCheckBox>();

        viewModel.specialtyName = _listService.GetListItemByID(5); //Medicine Specialty

        foreach (var item in subSpecialties)
        {
            ViewModelCheckBox chkBox = new ViewModelCheckBox { Id = item.subID.ToString(), Name = item.ListSub.description, Checked = false };
            checkBoxList.Add(chkBox);
        }

        viewModel.SubSpecialityList = checkBoxList;
var subSpecialties=getsubspecialties for speciality(5);
ViewModelShiftSubSpecialties viewModel=新ViewModelShiftSubSpecialties();
var checkBoxList=新列表();
viewModel.specialtyName=\u listService.GetListItemByID(5)//医学专业
foreach(子专业中的var项目)
{
ViewModelCheckBox chkBox=newViewModelCheckbox{Id=item.subID.ToString(),Name=item.ListSub.description,Checked=false};
复选框列表。添加(chkBox);
}
viewModel.SubSpecialityList=复选框列表;
在我的视图中,我显示列表名称,并使用编辑器模板显示复选框列表

<h3>@Model.specialtyName.description</h3>
@Html.EditorFor(m => m.SubSpecialityList)
@Model.specialtyName.description
@EditorFor(m=>m.subspecialist)
然而,如何让上述代码在一个视图中使用多个复选框列表,我完全被难住了。这可能吗

如果有人能帮我,我将不胜感激


谢谢。

看起来你已经完成了所有的工作。您已经有了一个编辑器模板,该模板可以与ViewModelCheckBox IEnumerable一起正常工作。如果不能对同一数据类型重用编辑器模板,那么编辑器模板将不会有用。你只需要使用它三次。只需扩展ViewModel

public class ViewModelShiftSubSpecialties
{
    public ListItem specialtyName { get; set; } //Might need 3 of these
    public IEnumerable<ViewModelCheckBox> SubSpecialityList1 { get; set; }
    public IEnumerable<ViewModelCheckBox> SubSpecialityList2 { get; set; }
    public IEnumerable<ViewModelCheckBox> SubSpecialityList3 { get; set; }
}
或者,您可以创建一个包含单个专业名称和
IEnumerable ViewModelCheckBox
的类,并使您的ViewModel具有此新类的IEnumerable。然后为这个新类创建一个新的编辑器模板。如果您的列表大小可变/可能改变,我认为这是值得的。否则,我会使用早期的解决方案进行简单的修复

public class ViewModelShiftSubSpecialties
{
    public class IEnumerable<SubSpecialty> { get; set; }
}

public class SubSpecialty
{
    public ListItem specialtyName { get; set; }
    public IEnumerable<ViewModelCheckBox> SubSpecialityList
}
public类ViewModelShiftSubSpecialties
{
公共类IEnumerable{get;set;}
}
公共类副专业
{
公共ListItem specialtyName{get;set;}
公共IEnumerable子专业列表
}

这看起来不错,谢谢。你能详细介绍一下你的第二个解决方案吗?谢谢。谢谢你的阿芬克尔斯坦-这真的很有用。