只有当它不存在于剃刀中时才添加到selectlist中

时间:2017-02-15 05:41:52

标签: razor contains selectlist

我想通过使用'language'属性遍历子节点来动态创建选择列表。因此,只有在以前未添加此属性值时,才想将此属性值添加为选择列表项。

我有以下代码。

@{


       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"})

}

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

1 个答案:

答案 0 :(得分:2)

如果我理解正确,那个文字包含重复的问题, 这是因为你创建了对象项的新实例,而check是列表包含新实例(你没有检查相同的属性,你检查完全相同的对象)。

更改此行:

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 for DropDownList