我有一个课程,主要负责持有创建List<SelectListItem>
个对象的方法。这样,如果需要,我可以在多个视图中引用这些方法。
我有一个我认为需要分组的下拉列表,所以我这样做了:
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" })
当我运行此操作时,我会在下拉列表中看到所有名称,但分组只是System.Web.Mvc.SelectListGroup
。为什么Value和Text值有效但不是分组?
答案 0 :(得分:0)
我已经弄明白了。出于某种原因,如果我尝试在新的SelectList对象中调用该方法,就像我正在做的那样,那么分组将无法工作。
但我改变了控制器中的行:
ViewBag.InstrucSelect = new SelectList(SelectListMethods.lstPersonnel(), "Value", "Text", "Group", null, null);
要:
ViewBag.InstrucSelect = SelectListMethods.lstPersonnel();
现在它有效。即使这是一个答案中的问题(用问题回答一个问题),为什么在将方法作为新的SelectList对象中的IEnumerable重载调用时,分组不起作用,但是值和文本值呢?