Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算asp.net mvc中视图中的项目数_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Razor - Fatal编程技术网

C# 计算asp.net mvc中视图中的项目数

C# 计算asp.net mvc中视图中的项目数,c#,asp.net,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,我对asp.net开发非常陌生。在我的asp.NETMVC项目中,我有一个模型“Employee”,我将一个“Employee”模型列表传递给RAZOR视图,我试图统计不同类型的员工并显示一个摘要 我的看法是这样的, @{ int available = 0; int onLeave = 0; int away = 0; int unAvailable = 0; } @foreach (var employee in Model){ <lable>

我对asp.net开发非常陌生。在我的asp.NETMVC项目中,我有一个模型“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>
@{
int available=0;
int-onLeave=0;
int-away=0;
int=0;
}
@foreach(模型中的var员工){
@雇员姓名
@如果(@employee.Available){ @可用=可用+1; } @如果(@employee.Unavailable){ @不可用=不可用; } @如果(@employee.Away){ @离开=离开+1; } @如果(@employee.Onleave){ @onLeave=onLeave+1; } } 可用:@可用 不可用:@不可用 走开:@走开 休假:@onLeave
但是,当我运行我的项目变量“available”、“unAvailable”、“away”和“onLeave”时,不会得到更新

我确信该列表不是空的,因为正在显示员工姓名。
有人能解释一下这里发生了什么以及正确的方法吗?Mvc示例介绍了如何做到这一点:

你需要一个模型课

public class EmployeeModel
{
        public int Available {get; set;}
        public int OnLeave  {get; set;}
        public int Away {get; set;}
        public int UnAvailable  {get; set;}
}
还有一个命令:

  public ActionResult Index()
  {
    var model = new EmployeeModel();
    model.Available = employee.count(e=> e.available);
    model.OnLeave = employee.count(e=> e.onLeave);
    model.Away = employee.count(e=> e.away);
    model.UnAvailable = employee.count(e=> e.unAvailable );
    return View(model);
  }
还有一个观点

@model EmployeeModel
   <div>
        <!--additional summary is displayed here-->
        <label>Available:</label>@Model.Available
        <label>Unavailable:</label>@Model.UnAvailable
        <label>Away:</label>@Model.Away
        <label>On Leave:</label>@Model.OnLeave
   </div>
@model EmployeeModel
可用:@Model.Available
不可用:@Model.Unavailable
离开:@Model.Away
休假:@Model.OnLeave

Mvc示例介绍如何操作:

你需要一个模型课

public class EmployeeModel
{
        public int Available {get; set;}
        public int OnLeave  {get; set;}
        public int Away {get; set;}
        public int UnAvailable  {get; set;}
}
还有一个命令:

  public ActionResult Index()
  {
    var model = new EmployeeModel();
    model.Available = employee.count(e=> e.available);
    model.OnLeave = employee.count(e=> e.onLeave);
    model.Away = employee.count(e=> e.away);
    model.UnAvailable = employee.count(e=> e.unAvailable );
    return View(model);
  }
还有一个观点

@model EmployeeModel
   <div>
        <!--additional summary is displayed here-->
        <label>Available:</label>@Model.Available
        <label>Unavailable:</label>@Model.UnAvailable
        <label>Away:</label>@Model.Away
        <label>On Leave:</label>@Model.OnLeave
   </div>
@model EmployeeModel
可用:@Model.Available
不可用:@Model.Unavailable
离开:@Model.Away
休假:@Model.OnLeave

考虑到被认为是不良做法,进行此类计算

在您的情况下,更好的选项是创建具有相应属性的
ViewModel
,然后将其传递给模型,之前使用LINQ计算控制器中每种类型的计数。您可以在其中引用您的类型,如
Model.available、Model.away
等。使用ViewModel是MVC的最佳实践

@Thorarins answer向您展示了如何在代码中使用LINQ来计算类型的计数

更新:
您可以使用JS,但不应该,因为它仍然不是视图中应该发生的事情。不应在视图中处理数据。不要被ViewModels吓到,它们并不像看上去那么难。请阅读所有考虑数据传递的方法,这有一个很好的例子,如何创建和传递视图模型。

< P>让这样的计算在视图中被认为是“强>坏的实践< /强> ./P>
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)
}
在您的情况下,更好的选项是创建具有相应属性的
ViewModel
,然后将其传递给模型,之前使用LINQ计算控制器中每种类型的计数。您可以在其中引用您的类型,如
Model.available、Model.away
等。使用ViewModel是MVC的最佳实践

@Thorarins answer向您展示了如何在代码中使用LINQ来计算类型的计数

更新:
您可以使用JS,但不应该,因为它仍然不是视图中应该发生的事情。不应在视图中处理数据。不要被ViewModels吓到,它们并不像看上去那么难。请阅读所有考虑如何传递数据到视图的方法,它有一个很好的例子来说明如何创建和传递视图模型。

< P>你应该在传递到视图之前做这件事,就像我在原来的评论中提到的那样。您可以创建一个名为ViewModel的新对象,以完全按照您在页面上希望的方式表示数据。所以我创建了一个简单的示例,我只使用了您在CSHTML页面中显示的Employee的4个属性。在你的视图中,你说你的模型是一个列表、数组或任何形式的雇员,把它改成EmployeeViewModel。然后在获取员工列表的控制器中,将其设置为员工视图模型的employees属性

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)
}
公共类EmployeeViewModel
{
公共IEnumerable雇员{get;set;}
public int TotalAvailable{get{return Employees.Count(emp=>emp.Available);}
public int TotalUnavailable{get{return Employees.Count(emp=>emp.unavailable);}
public int TotalAway{get{return Employees.Count(emp=>emp.Away);}
public int TotalOnLeave{get{return Employees.Count(emp=>emp.OnLeave);}
}
公营雇员
{
公共bool可用{get;set;}
公共布尔不可用{get;set;}
公共bool-Away{get;set;}
公共bool OnLeave{get;set;}
}
//在控制器中执行此操作。
public ActionResult Index()//在此处使用控制器操作名称
{
var employeeViewModel=new employeeViewModel{Employees=/*您之前作为模型的员工列表*/}
返回视图(employeeViewModel)
}
将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>
@foreach(Model.Employees中的var employee)
{
@雇员姓名
} 可用:@Model.TotalAvailable 不可用:@Model.TotalUnavailable 离开:@Model.TotalAway 休假:@Model.TotalOnLeave
在传递到视图之前,您应该在外部执行此操作,就像我在原始注释中提到的那样。您可以创建一个名为ViewModel的新对象,以完全按照您在页面上希望的方式表示数据。所以我创建了一个简单的示例,我只使用了您在CSHTML页面中显示的Employee的4个属性。在你的视图中,你说你的模型是一个列表、数组或任何形式的雇员,把它改成EmployeeViewModel。然后在获取员工列表的控制器中,将其设置为员工视图模型的employees属性

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)
}
公共类EmployeeViewModel
{
公共IEnumerable雇员{get;set;}
public int TotalAvailable{get{return Employees.Count(emp=>emp.Available);}
public int TotalUnavailable{get{return Employees.Count(emp=>e