4

我正在开发一个ASP.Net MVC 3 Web应用程序,我最近发表了一篇关于如何显示的CheckBoxListASP.Net MVC 3个多CheckBoxLists

ASP.Net MVC 3 Retrieve Checkbox List Values

,并感谢来自RubbleFord和帮助问题达林季米特洛夫我能够得到这个工作。

这适用于一个checkboxlist,但是,现在我需要能够在同一个视图上显示多个checkbox列表,即查看附加的图片。是

enter image description here

我使用当前显示一个列表中的的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; } 
} 

我的控制器中我填充ViewModelShiftSubSpecialties这样:

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; 

在我看来,我显示列表名称,并使用编辑器模板来显示的CheckBoxList

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

然而,我完全难以理解如何让上面的代码与一个View上的多个复选框列表一起工作。这甚至有可能吗?

我真的很感激,如果有人可以请帮我这个。

谢谢。

回答

5

看起来你已经完成了所有的工作。您已经有了一个可以与ViewModelCheckBox IEnumerable正常工作的编辑器模板。如果你不能为相同的数据类型重用它们,编辑器模板将不会有用。你只需要使用它三次。只是延长您的视图模型

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; } 
} 

创建你的控制器所有三个(并给予他们更好的名字,然后我做了)。

,然后在视图

@Html.EditorFor(m => m.SubSpecialityList1) 
@Html.EditorFor(m => m.SubSpecialityList2) 
@Html.EditorFor(m => m.SubSpecialityList3) 

另外,您可以创建一个包含一个单一的专业名称和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 
} 
+0

这看起来不错,谢谢。你能否详述一下你的第二个解决方案?谢谢。 – tgriffiths 2012-04-17 15:15:27

+0

感谢这个AFinkelstein - 这真的很有用。 – tgriffiths 2012-04-17 15:27:52

+0

当然,很乐意提供帮助。 – DMulligan 2012-04-17 15:33:01