【问题标题】:Is there an OrderBy option for ViewBagViewBag 是否有 OrderBy 选项
【发布时间】:2018-07-03 17:35:20
【问题描述】:

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

我应该如何解决这个问题?

【问题讨论】:

  • 您的代码是一个非常糟糕的主意-没有强类型模型绑定,没有客户端验证,所选项目,如果返回视图等将丢失等。使用@Html.DropDownListFor() 方法生成你的&lt;select&gt;
  • 我无法让下拉列表使用串联的名字和姓氏
  • 这很容易解决 - yourTable.Select(x =&gt; new SelectListItem{ Value = x.Id.ToString(), Text = x.FirstName + " " + x.LastName });

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


【解决方案1】:

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;

//...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-14
    • 2019-05-05
    • 2015-07-04
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    相关资源
    最近更新 更多