2008-10-21 69 views
15

我有类似的东西在ASP.NET MVC应用程序如下:IEnumerable的<string>到的SelectList,没有选择值

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

甚至想到选定值定义,它没有被在视图中选择。我有这种感觉,我在这里错过了一些东西,所以如果任何人都可以让我摆脱我的痛苦!

我知道我可以使用一个恼人的类型来提供键和值,但我宁愿不添加额外的代码,如果我不必。

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

+1

见我DDL教程HTTP:// WWW。 asp.net/mvc/tutorials/javascript/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc和http://blogs.msdn.com/b/ rickandy/archive/2012/01/09/cascasding-dropdownlist-in-asp-net-mvc.aspx – RickAndMSFT 2012-02-14 19:21:56

回答

14

试试这个:

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

的SelectList(至少在预览5)是不够聪明地看到IEnumerable的元素是值类型,所以应该使用该项目的金额和文字。相反,它将每个项目的值设置为“null”或类似的东西。这就是为什么选定的值不起作用。

4

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

这是怎么回事任何作为很好的解释。

+1

仅供参考,链接已经死机;看起来像域名过期。 – CBono 2010-12-30 22:19:20

+0

不回答他的问题 – 2014-09-30 01:22:10

14

如果你只是想映射一个IEnumerable<string>SelectList你可以做内联这样的:

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

而不是.Select(...),你可以.ToDictionary(...) – 2014-08-29 10:34:09

2

试试这个

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