2017-02-15 19 views
0

'language'プロパティを持つ子ノードをトラバースしてselectlistを動的に作成したいと考えています。したがって、以前に追加されていない場合にのみ、このプロパティ値を選択リスト項目として追加する必要があります。剃刀に存在しない場合にのみ選択リストに項目を追加してください

次のコードがあります。

@{ 


     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.All(i => i.Value != item.Value)) 

たり、ユニークなペアが必要な場合:このような何かのために

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

をも

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

は、コントローラと使用中のすべてのログインを移動をお勧めしますDropDownListのビューバック

+0

ありがとう....私は含まれているを使用していた。しかし、それはcontains()で動作しませんでしたか? – ghetal

+0

同じオブジェクトの外観を含み、新しいオブジェクト(他のハッシュを含む)をすべて作成するため、リストからオブジェクトを取得した場合にのみ機能しますcontains var item = litem.firstordefault(i = i.Value = 'some value' ) アイテムに「新規」キーワードを使用すると、他のハッシュコードを持つ他のオブジェクト –

+0

が分かりやすくなりました – ghetal

関連する問題