字典键和选择列表的值

时间:2014-01-23 11:55:32

标签: c# asp.net-mvc

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添加到SelectListIDName是该特定对象list(mylist)的两个属性。

同样,我需要将词典添加到SelectList.


需要将字典的键添加到data Value参数 - (上例中的ID位置) 需要将字典的值添加到data text参数 - (上面示例的Name位置)

因此,请告诉我一种使用此字典键和值创建选择列表的方法,而无需创建新类。

6 个答案:

答案 0 :(得分:33)

你可以尝试:

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

Dictionary<string, string>实施IEnumerable<KeyValuePair<string, string>>KeyValuePair为您提供KeyValue属性。

但请注意,枚举Dictionary<string,string>返回的项目顺序无法保证。如果您想要保证订单,您可以执行以下操作:

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

答案 1 :(得分:14)

您真正需要做的就是将字典作为参数传递并使用重载:

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");

我知道这篇文章有点陈旧但是我来到这里找到了答案,并根据之前给出的答案得出了这个结论。

答案 2 :(得分:3)

您可以从Dictionary中构造一个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);

答案 3 :(得分:1)

我喜欢这样写:

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

因此,您不必依赖字符串"Key""Value"

答案 4 :(得分:0)

尝试

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

答案 5 :(得分:0)

我将其用于SelectListItem的列表,并且可以很好地用于选择标记和下拉列表

dict.OrderBy(x => x.Value).Select(r => new SelectListItem(r.Key, r.Value));