大约 5 年前,当我开始使用 C# 时,我从一长串 VB.NET(blech)中跳出来,有点跳过了扩展方法的概念。这些东西都很棒。然而,我的第一次尝试失败了。我正在尝试为 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
> 元素的容器。如果有人有关于原因的更详细信息,我很想听听。我对此做了一些实验,但到目前为止还无法找出发生这种情况的原因。
过去,我通过使用新的 SelectList
重载克服了这个问题,该重载允许您显式指定选定的值。
关于c# - ASP.NET MVC SelectList 扩展方法不选择列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49456049/