IEnumerable <string>到SelectList,没有选择值</string>

时间:2008-10-21 16:28:41

标签: c# asp.net-mvc

我在ASP.NET MVC应用程序中有以下内容:

IEnumerable<string> list = GetTheValues();
var selectList = new SelectList(list, "SelectedValue");

甚至认为选定的值已定义,但未在视图中选择它。我有这种感觉,我在这里遗漏了一些东西,所以如果有人能把我的痛苦赶出去的话!

我知道我可以使用烦人的类型来提供密钥和值,但如果我不需要,我宁愿不添加额外的代码。

编辑:ASP.NET MVC RTM修复了此问题。

4 个答案:

答案 0 :(得分:14)

请改为尝试:

IDictionary<string,string> list = GetTheValues();
var selectList = new SelectList(list, "Key", "Value", "SelectedValue");

SelectList(至少在预览版5中)不够聪明,看不到IEnumerable的元素是值类型,因此它应该将值用于值和文本。相反,它将每个项目的值设置为“null”或类似的东西。这就是所选值无效的原因。

答案 1 :(得分:14)

如果您只是想将IEnumerable<string>映射到SelectList,可以像这样内联:

new SelectList(MyIEnumerablesStrings.Select(x=>new KeyValuePair<string,string>(x,x)), "Key", "Value");

答案 2 :(得分:4)

看看这个:ASP.NET MVC SelectList selectedValue Gotcha

这可以很好地解释发生了什么。

答案 3 :(得分:2)

试试这个

ViewBag.Items = list.Select(x => new SelectListItem() 
                              {
                                  Text = x.ToString()
                              });