Словарные ключи и значения для выбранного списка

Dictionary<string,string> dict = new Dictionary<string,string>();    
  dict.add("a1", "Car");
  dict.add("a2", "Van");
  dict.add("a3", "Bus");

SelectList SelectList = new SelectList((IEnumerable)mylist, "ID", "Name", selectedValue);

в приведенном выше коде я поместил список "mylist" в список Select. Идентификатор и имя - это два свойства этого списка объектов (mylist). Также мне нужно добавить словарь в список выбора. ** Необходимо добавить ключ словаря к параметру "значение данных" - ( "Позиция ID вышеприведенного примера" ) Необходимо добавить значение словаря к параметру "текст данных" - (позиция "Имя" в приведенном выше примере)

Итак, скажите мне, как создать список выбора, используя эти словарные ключи и значения, без создания нового класса.

Ответ 1

Вы можете попробовать:

SelectList SelectList = new SelectList((IEnumerable)dict, "Key", "Value", selectedValue);

Dictionary<string, string> реализует IEnumerable<KeyValuePair<string, string>>, а KeyValuePair предоставляет свойства Key и Value.

Помните, однако, что порядок элементов, возвращаемых путем перечисления Dictionary<string,string>, не гарантируется. Если вы хотите получить гарантированный заказ, вы можете сделать что-то вроде:

SelectList SelectList = new SelectList(dict.OrderBy(x => x.Value), "Key", "Value", selectedValue);

Ответ 2

Все, что вам действительно нужно сделать, это передать словарь в качестве параметра и использовать перегрузку:

public SelectList(IEnumerable items, string dataValueField, string dataTextField);

Пример:

var dictionary = new Dictionary<string, string>
{
   {"a1", "Car"}, 
   {"a2", "Van"}, 
   {"a3", "Bus"}
};

var selectList = new SelectList(dictionary, "Key", "Value");

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

Ответ 3

Вы можете создать список объектов SelectListItem из Словаря, а затем создать из него SelectList.

var dict = new Dictionary<string, string>
{
   {"a1", "Car"}, 
   {"a2", "Van"}, 
   {"a3", "Bus"}
};

var myListItems = new List<SelectListItem>();

myListItems.AddRange(dict.Select(keyValuePair => new SelectListItem()
{
    Value = keyValuePair.Key, 
    Text = keyValuePair.Value
}));

var myList = new SelectList(myListItems);

Ответ 4

Try

SelectList SelectList = new SelectList((IEnumerable)mylist, "Key", "Value", selectedValue);

Ответ 5

Мне нравится писать это вот так:

@Html.DropDownListFor(model => model.Delimiter,
                                         new Dictionary<string, string>
                                         {
                                             {",", ", (Comma)"},
                                             { ";", "; (Semicolon)"}
                                         }.Select(x => new SelectListItem {Value = x.Key, Text = x.Value}))

Таким образом, вам не нужно полагаться на строки "Key" и "Value".