Как правильно создать MultiSelect <select> с помощью помощника DropdownList?
(извините, здесь есть несколько элементов, но никто, кажется, не позволяет мне работать.)
Я хочу создать DropDownList, который допускает множественный выбор. Я могу заполнить список, но я не могу заставить текущие выбранные значения работать.
В моем контроллере есть следующее:
ViewBag.PropertyGroups = from g in db.eFinGroups
where g.GroupType.Contents == "P"
select new
{
Key = g.Key,
Value = g.Description,
Selected = true
};
ViewBag.SelectedPropertyGroups = from g in company.Entities
.First().Properties.First().PropertyGroups
select new {
g.eFinGroup.Key,
Value = g.eFinGroup.Description };
В представлении у меня есть:
@Html.DropDownListFor(model => model.PropertyGroupsX,
new MultiSelectList(ViewBag.PropertyGroups
, "Key", "Value"
, ViewBag.SelectedPropertyGroups),
new { @class = "chzn-select", data_placeholder = "Choose a Property Group", multiple = "multiple", style = "width:350px;" })
PropertyGroupX - это строка [] в модели.
Я пробовал все типы итераций с выбранными свойствами... передавая только значение, просто ключ, оба и т.д.
Кроме того, какой тип должен быть PropertyGroupX? Правильно ли строковый массив? Или это словарь, содержащий текущие классы свойств? Мне действительно трудно найти документ об этом.
Кто-то предложил мне использовать ListBoxFor. Я изменил это и все еще имею ту же проблему. Выбранные значения не будут выбраны, если выбраны теги параметров. Вот что я пробовал:
@Html.ListBoxFor(model = > model.PropertyGroups, новый MultiSelectList (ViewBag.PropertyGroups, "Key", "Value" ))
Я попробовал model.PropertyGroups как набор строк, соответствующих значениям, как набор рекомендаций, соответствующих этим идентификаторам, и как анонимный тип с ключом и значением для соответствия элементам в ViewBag. Кажется, что ничего не работает.
Ответы
Ответ 1
Вы не используете DropDownListFor
, если хотите создать список мультиселектов. Вы используете помощник ListBoxFor
.
Просмотр модели:
public class MyViewModel
{
public string[] SelectedIds { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
Контроллер:
public ActionResult Index()
{
var model = new MyViewModel
{
// preselect the first and the third item given their ids
SelectedIds = new[] { "1", "3" },
// fetch the items from some data source
Items = Enumerable.Range(1, 5).Select(x => new SelectListItem
{
Value = x.ToString(),
Text = "item " + x
})
};
return View(model);
}
Вид:
@model MyViewModel
@Html.ListBoxFor(x => x.SelectedIds, Model.Items)