4

Я разрабатываю 3 веб-приложение ASP.Net MVC, и я недавно отправил вопрос о том, чтобы отобразить CheckBoxListASP.Net MVC 3 Несколько CheckBoxLists

ASP.Net MVC 3 Retrieve Checkbox List Values

и благодаря помощи RubbleFord и Дарин Димитров. Я смог заставить это работать.

Это хорошо работает для одного checkboxlist, однако теперь мне нужно иметь возможность показывать несколько флажков на одном и том же представлении, то есть видеть прикрепленное изображение.

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) 

Тем не менее, я полностью зациклен на том, как заставить вышеуказанный код работать с несколькими checkboxlists на одном представлении. Возможно ли это?

Я был бы очень признателен, если бы кто-то мог мне помочь в этом.

Спасибо.

ответ

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 
} 
+0

Это выглядит хорошо, спасибо. Не могли бы вы подробнее рассказать о своем втором решении? Благодарю. – tgriffiths

+0

Спасибо за это AFinkelstein - это действительно полезно. – tgriffiths

+0

Конечно, рад помочь. – DMulligan