Я пытаюсь адаптировать ответы для заполнения ListBoxFor, у которого есть заранее выбранные значения, которые я нашел здесь, на SO, и у меня возникли некоторые проблемы с адаптацией.
Это один из вопросов, которые я 'я имел в виду: здесь
Вот мой класс, который определяет объект списка
public class SelectListDTO {
public int ID { get; set; }
public string Name { get; set; }
}
У меня есть метод в классе, который заполняет список элементов SelectListDTO,CheckRefresh проверяет, не истек ли срок действия кэша, если это так, он заполняет кэш.Таким образом, этот метод получает мой список:
private List<SelectListDTO> GetSelectList() {
CheckRefresh();
var lst = new List<SelectListDTO>(_cache.Count + 1);
_cache.ForEach(item => lst.Add(new SelectListDTO { ID = item.ID, Name = item.Name }));
return lst;
}
Моя модель определяется с помощью этих свойств / методов:
public class MyModel {
[Required]
[Display(Name = "Program Type")]
[Min(1, ErrorMessage = "Please select a Program Type")]
public int[] SelectedProgramTypes { get; set; }
public MultiSelectList ProgramTypes { get; set; }
public MyModel() {
PopulateProgramTypeList();
}
private void PopulateProgramTypeList() {
// Get all available list items
var programTypes = ProgramTypeService.Instance.GetSelectList;
// how to fill multiselectlist with my List<SelectListDTO> items;
ProgramTypes = new MultiSelectList(??)
}
}
1-я часть вопроса приведена выше здесь ^ Как заполнитьMultiSlectList с моим списком объектов SelectListDTO
Также в действии моего контроллера я получаю сохраненные элементы из БД и должен передать их в модель как SelectedProgramTypes.В данный момент это мое действие:
public ActionResult Edit(int? id) {
// Code here to validate id and that user is associated with id
lenderProduct = new LenderProduct(id);
var model = BuildModel(lenderProduct); // returns instance or MyModel
var selectedProgramTypes = lenderProduct.ProgramTypes;
foreach (var item in selectedProgramTypes) {
/// How to fill the Model.SelectedProgramTypes array
}
return View(model);
}
2-я часть вопроса - как получить выбранные в данный момент элементы, которые я прочитал из БД, в массив, который может использоваться MultiSelectList в модели
Мне кажется, что я так близко , но мне не хватает некоторого паттерна или, надеюсь, только правильного синтаксиса, чтобы заставить это работать таким образом, а не каквидел размещенный здесь.Я еще не дошел до View, но из того, что я видел, это так же просто, как заполнить обычный DropDownList.