ASP.NET MVC SelectList扩展方法不选择列表项

时间:2018-03-23 18:15:30

标签: c# asp.net-mvc selectlistitem

来自VB.NET(blech)的长篇大论,当我大约5年前开始使用C#时,我有点跳过了扩展方法的概念。这些都很棒。然而,我的第一次尝试是失败。我试图为SelectList创建一个简单的扩展方法,只要有1个SelectListItem就会选择列表中唯一的项目。

以下不起作用:

public static SelectList SelectIfOnlyOneItem(this SelectList list)
{
   if (list.Count() == 1) { list.Single().Selected = true; }
   return list;
}

FooList = new SelectList(new[] { "Only Item" }, "").SelectIfOnlyOneItem();

但是

FooList = new SelectList(new[] { "Only Item" }, "Only Item");

工作正常。

1 个答案:

答案 0 :(得分:2)

我认为以下内容适合您:

public static SelectList SelectIfOnlyOneItem(this SelectList list)
{
   if (list.Count() == 1) 
   { 
       list= new SelectList(list.ToList(), "Value", "Text", list.Single().Value)
   }

   return list;
}

我通过自己的试验注意到,在Selected上设置SelectListItem属性时,此属性不会始终转换为项目的SelectList容器。如果有人有更详细的信息,为什么会这样,我很乐意听到。我已经对此做了一些实验,到目前为止还无法找出原因。

过去,我通过使用允许您明确指定所选值的new SelectList重载来克服此问题。