我正在尝试对通过ViewBag
调用的ForEach
列表中的项目进行排序。
我看到有一个Model.OrderBy
选项。
ViewBag
是否有类似内容?
我的代码如下:
<select class="list-box tri-state" id="ParentID" name="ParentID">
@foreach (var item in ViewBag.EmployeeList)
{
<option value="@item.Id">@item.FirstName @item.LastName</option>
}
</select>
理想情况下,我希望选择列表按FirstName
,LastName
进行排序,但默认情况下按Id
进行排序。
我应该如何补救?
答案 0 :(得分:2)
ViewBag
是动态的。
所以假设它是在控制器中设置的
List<Employee> employees = getEmployeeList();
this.ViewBag.EmployeeList = employees;
//...
return View(model);
在视图中,将属性强制转换为已知的类型集合,然后可以使用扩展方法。
@foreach (var item in (ViewBag.EmployeeList as List<Employee>)
.OrderBy(_ => _.FirstName).ThenBy(_ => _.LastName)) {
<option value="@item.Id">@item.FirstName @item.LastName</option>
}
或者,您也可以在控制器中对其进行排序,然后再将其分配给ViewBag
,然后让代码在视图中循环进行收集。
List<Employee> employees = getEmployeeList()
.OrderBy(_ => _.FirstName).ThenBy(_ => _.LastName)
.ToList();
this.ViewBag.EmployeeList = employees;
//...