我正在尝试对通过 ForEach
调用的 ViewBag
列表中的项目进行排序。
我看到有一个 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
排序。
我该如何解决这个问题?
最佳答案
ViewBag
是动态的。
所以假设它是在 Controller 中设置的
List<Employee> employees = getEmployeeList();
this.ViewBag.EmployeeList = employees;
//...
return View(model);
在 View 中,将属性转换为已知类型集合,然后扩展方法应该可用。
@foreach (var item in (ViewBag.EmployeeList as List<Employee>)
.OrderBy(_ => _.FirstName).ThenBy(_ => _.LastName)) {
<option value="@item.Id">@item.FirstName @item.LastName</option>
}
或者,您也可以在将其分配给 ViewBag
之前在 Controller 中对其进行排序,然后让代码在 View 中循环集合。
List<Employee> employees = getEmployeeList()
.OrderBy(_ => _.FirstName).ThenBy(_ => _.LastName)
.ToList();
this.ViewBag.EmployeeList = employees;
//...
关于c# - ViewBag 是否有 OrderBy 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51160192/