ViewBag 是否有 OrderBy 选项

Is there an OrderBy option for ViewBag

我正在尝试对通过 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>

理想情况下,我希望选择列表按 FirstNameLastName 排序,但默认按 Id 排序。

我该如何补救?

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;

//...