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

ASP.NET MVC SelectList extension method not selecting list item

来自一长串 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");

工作正常。

我认为以下内容应该适合您:

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

   return list;
}

我通过自己的试验注意到,当在 SelectListItem 上设置 Selected 属性 时,此 属性 并不总是转换为 SelectList 物品的容器。如果有人有更多关于为什么会这样的详细信息,我很想听听。我对此做了一些实验,但到目前为止还无法找出发生这种情况的原因。

过去,我通过使用允许您显式指定所选值的 new SelectList 重载来克服这个问题。