ViewBag是否有OrderBy选项

时间:2018-07-03 17:35:21

标签: c# asp.net-mvc razor viewbag

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

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

我应该如何补救?

1 个答案:

答案 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;

//...