我想通过使用'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"})
}
但它无法检查列表中的相同项目。出了什么问题?
答案 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