ASP.Net MVC 3 EditorFor CheckBoxList

时间:2012-04-18 10:57:31

标签: asp.net-mvc-3 viewmodel checkboxlist editorfor

我正在使用Entity Framework 4.1开发ASP.Net MVC 3 Web应用程序。我在显示CheckBoxList时遇到问题。让我解释一下。

我有两个ViewModel的

public class ViewModelShiftSubSpecialties
{
    public IEnumerable<ViewModelCheckBox> SpecialtyList { get; set; }
}

public class ViewModelCheckBox
{
    public string Id { get; set; }
    public string Name { get; set; }
    public bool Checked { get; set; }
    public string Specialty { get; set; }
}

在我的Controller中,我填充了我的ViewModels

        IList<RelationshipGradeSub> gradeSubSpecialties = GetSubSpecialtiesForGrade(firstShiftGrade.gradeID);

        ViewModelShiftSubSpecialties viewModel = new ViewModelShiftSubSpecialties();

        var checkBoxList = new List<ViewModelCheckBox>();

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

        viewModel.SpecialtyList = checkBoxList;

        return View(viewModel);

我还有一个局部视图,用作EditorTemplate来显示我的复选框

@Html.HiddenFor(x => x.Id)        
@Html.CheckBoxFor(x => x.Checked)
@Html.LabelFor(x => x.Name, Model.Name)<br />

然后在我的视图中,我尝试过滤Model.Specialty并根据其专业将项目分类为三个复选框列表,即:

@foreach (var sub in Model.SpecialtyList)
{
if (sub.Specialty.Equals("Medicine"))
{
    @Html.EditorFor(m => m.SpecialtyList)
}
else if (sub.Specialty.Equals("Surgery"))
{
    @Html.EditorFor(m => m.SpecialtyList)
}
else if (sub.Specialty.Equals("Pathology"))
{
    @Html.EditorFor(m => m.SpecialtyList)
}

}

但这似乎根本不起作用,这给了我在第一个或第二个复选框列表中的任何内容,然后是第三个复选框列表中的所有列表项。基本上我想要实现的是这样的

enter image description here

有人可以给我一些指示让这个工作吗?

感谢。

1 个答案:

答案 0 :(得分:2)

我猜您的EditorTemplate用于显示复选框,用于ViewModelCheckBox类型:

@Html.HiddenFor(x => x.Id)        
@Html.CheckBoxFor(x => x.Checked)
@Html.LabelFor(x => x.Name, Model.Name)<br />

在这种情况下,您在使用List<ViewModelCheckBox>时发送@Html.EditorFor(m => m.SpecialtyList),但您应该发送的内容是ViewModelCheckBox:

@Html.EditorFor(m => sub)

我希望我能正确理解你。