我正在开发一个ASP.Net MVC 3 Web应用程序,我最近发布了一个关于如何显示复选框列表的问题
ASP.Net MVC 3 Retrieve Checkbox List Values
感谢RubbleFord和Darin Dimitrov的帮助,我得到了这个工作。
这适用于一个复选框列表,但是,我现在需要能够在同一个视图上显示多个复选框列表,即看到附加的图像。
我用来当前显示一个列表的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;
在我的视图中,我显示列表名称,并使用编辑器模板显示复选框列表
<h3>@Model.specialtyName.description</h3>
@Html.EditorFor(m => m.SubSpecialityList)
但是,我完全不知道如何让上面的代码在一个View上使用多个复选框列表。这甚至可能吗?
如果有人能帮助我,我真的很感激。
感谢。
答案 0 :(得分:5)
看起来你已经完成了所有的工作。您已经有一个可以与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; }
}
在你的控制器中创建所有三个(然后给它们更好的名字然后我做)。
然后在你的视图中
@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
}