计算 ASP.NET MVC 中视图中的项目数

e11*_*438 1 c# asp.net asp.net-mvc razor asp.net-mvc-4

我对 ASP.NET 开发非常陌生。在我的 asp.net mvc 项目中,我有模型“Employee”,我将“Employee”模型列表传递给 RAZOR 视图,我试图计算不同类型的员工并显示摘要。

我的看法是这样的

@{
    int available = 0;
    int onLeave = 0;
    int away = 0;
    int unAvailable = 0;
}

@foreach (var employee in Model){
  <lable>@employee.Name</lable></br>
   @if (@employee.Available){
      @available=available+1;
  }
   @if (@employee.Unavailable){
      @unAvailable=unAvailable;
  }
   @if (@employee.Away){
      @away=away+1;
  }
   @if (@employee.Onleave){
       @onLeave=onLeave+1;
  }

}
    <div>
        <!--additional summary is displayed here-->
        <label>Available:</label>@available
        <label>Unavailable:</label>@unAvailable
        <label>Away:</label>@away
        <label>On Leave:</label>@onLeave
    </div>
Run Code Online (Sandbox Code Playgroud)

但是当我运行我的项目变量“available”、“unAvailable”、“away”和“onLeave”时,不会更新。

我确信该列表不为空,因为正在显示员工姓名。有人可以解释一下这里发生了什么以及正确的方法吗

Cub*_*key 5

正如我在原始评论中提到的那样,您应该在传递到视图之前在外部执行此操作。您可以创建一个名为 ViewModel 的新对象来完全按照您希望在页面上显示的方式表示数据。所以我创建了一个简单的示例,我只使用了您在 CSHTML 页面中显示的 Employee 的 4 个属性。在您所说的模型是列表、数组或任何 Employee 的视图上,将其更改为 EmployeeViewModel。然后,在获取员工列表的控制器中,将它们设置为 Employee ViewModel 的 Members 属性。

public class EmployeeViewModel
{
    public IEnumerable<Employee> Employees { get; set; }
    public int TotalAvailable { get { return Employees.Count(emp => emp.Available); } }
    public int TotalUnavailable { get { return Employees.Count(emp => emp.Unavilable); } }
    public int TotalAway { get { return Employees.Count(emp => emp.Away); } }
    public int TotalOnLeave { get { return Employees.Count(emp => emp.OnLeave); } }

}

public class Employee
{
    public bool Available { get; set; }
    public bool Unavilable { get; set; }
    public bool Away { get; set; }
    public bool OnLeave { get; set; }
}

//In the controller do this.
public ActionResult Index() //use your controller Action Name here
{
    var employeeViewModel = new EmployeeViewModel { Employees = /*Your list of empoyees you had as a Model before here*/}
    return View(employeeViewModel)
}
Run Code Online (Sandbox Code Playgroud)

将您的 CSHTML 代码更改为如下所示:

@foreach(var employee in Model.Employees)
{
  <label> @employee.Name </label></br>
}
    <div>
        <!--additional summary is displayed here-->
        <label> Available:</label> @Model.TotalAvailable
        <label> Unavailable:</label> @Model.TotalUnavailable
        <label> Away:</label> @Model.TotalAway
        <label> On Leave:</label> @Model.TotalOnLeave
    </div>
Run Code Online (Sandbox Code Playgroud)