2012-04-18 133 views
3

我正在開發一個ASP.Net MVC 3 Web應用程序使用實體框架4.1。我在顯示CheckBoxList時遇到問題。讓我解釋。ASP.Net MVC 3 EditorFor CheckBoxList

我有兩個視圖模型的

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

在我的控制器,我填充我的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進行過濾並對ite進行分類MS分爲三個checkboxlists根據自己的特長,即:

@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) 
} 

} 

但是,這似乎並沒有在所有的工作,這是什麼給了我什麼都不是在第一或第二的CheckBoxList,然後在所有列表項第三個複選框列表。基本上我想實現的是這樣的

enter image description here

可能有人請給我一些指點得到這個工作?

謝謝。

+0

調試並觀察Model.SpecialtyList項目0和1索引元素 – Yorgo 2012-04-18 11:03:57

+1

您是否嘗試過使用這個:'@ Html.EditorFor(m => sub)'? – 2012-04-18 11:04:04

+0

那你到底在做什麼呢? – mattytommo 2012-04-18 11:09:01

回答

2

我猜你EditorTemplate顯示覆選框是ViewModelCheckBox類型:

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

在這種情況下,你使用@Html.EditorFor(m => m.SpecialtyList)List<ViewModelCheckBox>發送,但你應該把在爲ViewModelCheckBox:

@Html.EditorFor(m => sub) 

我希望我能正確理解你。

+0

感謝馬里奧,你的解決方案很好地工作。 – tgriffiths 2012-04-18 12:12:49