Как правильно создать MultiSelect <select>с помощью помощника DropdownList? - PullRequest
27 голосов
/ 08 декабря 2011

(извините, здесь есть несколько пунктов, но, похоже, ни один из них не позволяет мне работать).

Я хочу создать DropDownList, который допускает множественный выбор.Я могу заполнить список, но не могу заставить работать выбранные значения.

В моем контроллере есть следующее:

<code>ViewBag.PropertyGroups = from g in db.eFinGroups
                              where g.GroupType.Contents == "P"
                              select new
                              {
                                  Key = g.Key,
                                  Value = g.Description,
                                  Selected = true
                              };</p>

<p>ViewBag.SelectedPropertyGroups = from g in company.Entities
                   .First().Properties.First().PropertyGroups 
                   select new { 
                                g.eFinGroup.Key, 
                                Value = g.eFinGroup.Description };

В представлении, которое у меня есть:

<code>@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, new MultiSelectList (ViewBag.PropertyGroups, "Key", "Value"))

Я пыталсяmodel.PropertyGroups как коллекция строк, соответствующих значениям, как коллекция Guid, соответствующих этим идентификаторам, и как анонимный тип с ключом и значением для соответствия элементам в ViewBag.Кажется, ничего не работает.

1 Ответ

55 голосов
/ 08 декабря 2011

Вы не используете 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)
...