只有在剃须刀中不存在的项目才将其添加到选择列表中

add into selectlist an item only if it doesn't exist into razor

我想通过 'language' 属性 遍历子节点来动态创建 select 列表。因此,仅当之前未添加此 属性 值时才想将其添加为 select 列表项。

我有以下代码。

@{


       var litem = new List<SelectListItem>();

       litem.Insert(0, new SelectListItem { Selected = true, Text = "All", Value = "" });

       foreach (var i in Model.Content.Children.Where("Visible"))
          {
             //if (i.GetProperty("language").Value != "")
             if (i.GetProperty("language").Value != "")
             {
              string langstr = i.GetProperty("language").Value.ToString();
              SelectListItem item = new SelectListItem { Selected = false, Text = langstr, Value = langstr };

              if ((!(litem.Contains(item))))
               {
                  litem.Add(item);
               }
             }
          }

                    var slang=new SelectList(litem);

                    @Html.DropDownList("drpLang", @slang,  new { @class = "dropdown"})

}

但无法检查列表中存在的相同项目。出了什么问题?

如果我没理解错的话,问题是 item 包含重复项, 这是因为您创建了对象项的新实例,而不是检查列表是否包含新实例(您不检查相同的 属性,而是检查完全相同的对象)。

更改此行:

if ((!(litem.Contains(item))))

对于这样的事情:

if (litem.All(i => i.Value != item.Value))

或者如果您需要独特的一对:

if (litem.All(i => i.Value != item.Value && i.Text!= item.Text))

还建议将所有登录移动到控制器中,并将 viewbag 用于 DropDownList