【问题标题】:ASP.Net MVC 3 Multiple CheckBoxListsASP.Net MVC 3 多个 CheckBoxLists
【发布时间】:2012-04-17 14:40:54
【问题描述】:

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

ASP.Net MVC 3 Retrieve Checkbox List Values

多亏了 RubbleFord 和 Darin Dimitrov 的帮助,我才得以完成这项工作。

这对一个复选框列表很有效,但是,我现在需要能够在同一个视图上显示多个复选框列表,即,见附件。

我目前用来显示一个列表的ViewModel如下;

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)

但是,我完全不知道如何让上述代码在一个视图上处理多个复选框列表。这甚至可能吗?

如果有人能帮我解决这个问题,我将不胜感激。

谢谢。

【问题讨论】:

    标签: asp.net-mvc-3 viewmodel checkboxlist mvc-editor-templates


    【解决方案1】:

    看起来您已经完成了所有工作。您已经有一个可以与 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
    }
    

    【讨论】:

    • 这看起来不错,谢谢。您能否详细说明您的第二个解决方案?谢谢。
    • 感谢 AFinkelstein - 这真的很有用。
    猜你喜欢
    • 2011-09-29
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多