使用where子句淘汰foreach

时间:2017-12-07 23:20:29

标签: asp.net-mvc knockout.js

这个sytax是剃刀,我正在转换为knockoutJS ..任何帮助非常赞赏..

Where ItemStatus.Active is 0 in an enum in c# ( backend )

@foreach (var employee in Employees.Where(x => x.Status == ItemStatus.Active))
{   
  <div class="someclass”>
  <span class="label">Name:</span>
  <span class="value">@employee.Name</span> 
  </div>
}

我如何在淘汰赛中复制这种逻辑,即我只想展示目前活跃或就业的员工

谢谢

2 个答案:

答案 0 :(得分:1)

任何JavaScript表达式都可以在Knockout绑定中使用。

所以你可以使用filter函数(ES6):

<!-- ko foreach: Employees.filter(employee => employee.Status == 0) -->
...
<!-- /ko -->

或任何其他过滤方法:

<!-- ko foreach: ko.utils.arrayFilter(Employees.filter, function(employee) { return employee.Status == 0; }) -->
...
<!-- /ko -->

答案 1 :(得分:1)

Razor运行服务器端。因此,您无法使用Employees敲除绑定客户端的绑定。您需要将此Employees数据移交给javascript变量,然后在页面加载后使用knockout将其绑定到客户端。

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<script>
    // cretes a js array of active employees
    var activeEmployees = @Html.Raw(JsonConvert.SerializeObject(Employees.Where(x => x.Status == ItemStatus.Active)));

    var viewModel = {
      Employees: ko.observableArray(activeEmployees)
    }

    ko.applyBindings(viewModel);
</script>

在HTML中使用foreach绑定(此处Employees指的是您的淘汰赛viewModel的属性,而不是MVC)

<!-- ko foreach: Employees -->
<div class="someclass">
  <span class="label">Name:</span>
  <span class="value" data-bind="text:Name"></span>
</div>
<!-- /ko -->

您还需要在@using Newtonsoft.Json

cshtml文件的顶部添加JsonConvert