来自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");
工作正常。
答案 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
重载来克服此问题。