2017-12-18 12 views
-1

私は、オブジェクトを作成するメソッドを保持することを主な目的とするクラスがあります。List<SelectListItem>オブジェクトを作成します。この方法で、必要に応じて複数のビューでこれらのメソッドを参照できます。SelectListのグループDropDownListに表示されない

私はグループ化が必要になると思いドロップダウンリストを持っているので、私はこれをしなかった:

私のコントローラで
public static List<SelectListItem> lstPersonnel() 
{ 
    var lstPersonnel = new List<SelectListItem>(); 

    var lstActiveInstructors = db.InstructorSics.Where(x => x.Active).ToList(); 

    var lstTest = new List<GroupedCFI>(); 

    foreach (var person in lstActiveInstructors) 
    { 
     var emp = EmpData.GetEmp(person.InstrucSICIbm); 
     GroupedCFI cfi = new GroupedCFI() 
     { 
      Id = person.Id, 
      Name = $"{emp.FirstName} {emp.LastName}", 
      WorkLocation = $"{emp.Assignment} {emp.Section}" 
     }; 

     lstTest.Add(cfi); 
    } 

    var groups = lstTest.GroupBy(x => x.WorkLocation).ToList(); 

    foreach (var group in groups) 
    { 
     var slg = new SelectListGroup() {Name = group.Key}; 

     foreach (GroupedCFI item in group) 
     { 
      SelectListItem myItem = new SelectListItem() {Text = item.Name, Value = item.Id.ToString(), Group = slg}; 
      lstPersonnel.Add(myItem); 
     } 
    } 

    return lstPersonnel; 
} 

私が持っているこの:私の見解では

ViewBag.InstrucSelect = new SelectList(SelectListMethods.lstPersonnel(), "Value", "Text", "Group", null, null); 

@Html.DropDownListFor(model => model.InstrucSICId, (IEnumerable<SelectListItem>)ViewBag.InstrucSelect, "-- Select --", new { @class = "form-control" }) 

これを実行すると、ドロップダウンリストにすべての名前が表示されますが、グループ化はちょうどです0。なぜ値とテキストの値は機能していますが、グループ化されていませんか?

答えて

0

私はこれを理解しました。何らかの理由で、私がやっていたように新しいSelectListオブジェクト内でそのメソッドを呼び出そうとすると、グループ化は機能しません。

しかし、私はから私のコントローラ内の行を変更:

ViewBag.InstrucSelect = new SelectList(SelectListMethods.lstPersonnel(), "Value", "Text", "Group", null, null); 

へ:

ViewBag.InstrucSelect = SelectListMethods.lstPersonnel(); 

そして今、それが動作します。これは答え(質問の質問に答える)内の質問ですが、なぜ新しいSelectListオブジェクト内でIEnumerableオーバーロードとしてメソッドを呼び出すときにGroupingが機能しないのですか?値とテキストの値はどうなりますか?

関連する問題