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
重载来克服这个问题。
来自一长串 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
重载来克服这个问题。