【问题标题】:IEnumerable<string> to SelectList, no value is selectedIEnumerable<string> 到 SelectList,没有选择任何值
【发布时间】:2008-10-21 16:28:41
【问题描述】:

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

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

即使选择的值已定义,它也没有在视图上被选择。我有这种感觉,我在这里遗漏了一些东西,所以如果有人能把我的痛苦解救出来!

我知道我可以使用 annoymous 类型来提供键和值,但如果没有必要,我宁愿不添加额外的代码。

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

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

试试这个:

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

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

【讨论】:

    【解决方案2】:

    如果您只是想将IEnumerable&lt;string&gt; 映射到SelectList,您可以这样内联:

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

    【讨论】:

    • 可以用.ToDictionary(...)代替.Select(...)
    【解决方案3】:

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

    这是对正在发生的事情的良好解释。

    【讨论】:

    • 仅供参考,链接已失效;看起来域已过期。
    • 不回答他的问题
    【解决方案4】:

    试试这个

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

    【讨论】:

    • 给出一些解释的答案
    猜你喜欢
    • 2015-06-22
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多