C# 计算asp.net mvc中视图中的项目数
我对asp.net开发非常陌生。在我的asp.NETMVC项目中,我有一个模型“Employee”,我将一个“Employee”模型列表传递给RAZOR视图,我试图统计不同类型的员工并显示一个摘要 我的看法是这样的,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>
@{
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