2017-02-15 13 views
0

我想通過遍歷子節點與「語言」屬性動態創建選擇列表的。因此,只有在以前未添加該屬性值時,才需要將該屬性值添加爲選擇列表項。添加到選擇列表的一個項目,只有當它不存在到剃刀

我有下面的代碼。

@{ 


     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

如果我正確理解你,litem包含重複問題, 這是因爲你創建對象項目的新實例,並且檢查列表包含新實例(你不檢查相同的屬性,你檢查完全相同的對象)。

改變這一行:

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的

+0

謝謝....我正在使用包含。但是它不適用於contains()? – ghetal

+0

因含有找同一個對象,與您共創所有的時間新的對象(與其他散列),只包含如果從列表中來回例如VAR項目= litem.firstordefault(I = i.Value =「某個值」獲取對象將工作) 如果你使用new關鍵字詞項,這不是工作,因爲它的其他對象與其他散列碼 –

+0

感謝清晰度 – ghetal

相關問題