c# - ViewBag 是否有 OrderBy 选项

标签 c# asp.net-mvc razor 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 是动态的。

所以假设它是在 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/

相关文章:

c# - 筛选和编辑列表数据

c# - 如何将文本附加到多个文件

asp.net-mvc - 在 ASP.NET MVC 3 的类库中使用 MEF

c# - 如何将 IFormFile 传递到我的服务层?

razor - 我可以在 Blazor 中编写一个在 View 中动态呈现元素的函数吗?

C# - 如何在此代码上创建非数字异常?

c# - 为什么我的 RegEx 会根据平台得到两个不同的结果?

c# - 错误 : The type or namespace name 'Configuration' does not exist in the namespace 'System.Web'

c# - ASP.NET MVC 元素仅在主页上而不在容器中

c# - 使用 Razor Helper 有条件地包装内容