使用 pagedlist 时总计 属性
Get total of property when using pagedlist
我在下面定义了以下代码,我想做的是获取以下属性的总和(ItemsRequireingAttention、NumberOfUrgentItems)。
尽管 Model.Count 告诉我视图模型中有多少个视图模型,但我希望能够获得上述 2 个属性的总数。
我试过使用 Model.TotalCountFor 和 Model.Where,但似乎无法使它们正常工作。我下面的当前代码只会告诉我当前查看的子集的总数。这是可能的还是我必须考虑使用 partials
PortalViewModel
public class PortalViewModel
{
public Vehicle Vehicle { get; set; }
public bool MotExpired { get; set; }
public bool TaxExpired { get; set; }
public bool MotWithin7Days { get; set; }
public bool TaxWithin7Days { get; set; }
public bool MotWithin30Days { get; set; }
public bool TaxWithin30Days { get; set; }
public bool MotNotRecorded { get; set; }
public bool TaxNotRecorded { get; set; }
public int NumberOfUrgentItems { get; set; }
public int ItemsRequireingAttention { get; set; }
}
门户控制器
public class PortalController : Controller
{
public ActionResult Index(int? page)
{
var cookie = new HttpCookie("view", "admin");
var portalViewModel = new List<PortalViewModel>();
var vehicles = db.Vehicles.ToList();
foreach (var vehicle in vehicles)
{
var vm = new PortalViewModel { Vehicle = vehicle };
if (vehicle.MotDate == null)
{
vm.MotNotRecorded = true;
vm.NumberOfUrgentItems++;
}
if (vehicle.TaxDate == null)
{
vm.TaxNotRecorded = true;
vm.NumberOfUrgentItems++;
}
if (vehicle.MotDate <= DateTime.Now.AddYears(-1))
{
vm.MotExpired = true;
vm.NumberOfUrgentItems++;
}
if (vehicle.TaxDate != null && DateTime.Now.Subtract((DateTime)vehicle.TaxDate).Days >= 7)
{
vm.TaxWithin7Days = true;
}
else if (vehicle.TaxDate != null && DateTime.Now.Subtract((DateTime)vehicle.TaxDate).Days >= 30)
{
vm.TaxWithin30Days = true;
}
portalViewModel.Add(vm);
}
}
}
查看
@using Microsoft.Ajax.Utilities
@using PagedList
@using PagedList.Mvc;
@using WebApplication1.ViewModels
@model IPagedList<PortalViewModel>
@{
ViewBag.Title = "Dashboard";
var pagedList = (IPagedList)Model;
var urgentItems = Model.Count(i => i.NumberOfUrgentItems >= 1); //(item => item.NumberOfUrgentItems >= 1);
int flaggedItems = Model.Count(i => i.ItemsRequireingAttention >= 1);
int vehicles = Model.Count();
}
<h2>Dashboard</h2>
<hr />
<div class="row">
@if (urgentItems != 0)
{
<div class="col-md-3 col-sm-6 col-xs-6">
<div class="panel panel-back noti-box">
<span class="icon-box bg-color-red set-icon">
<i class="fa fa-warning"></i>
</span>
<div class="text-box">
<p class="main-text">@urgentItems Items</p>
<p class="text-muted">Requiring immediate action</p>
</div>
</div>
</div>
}
@if (flaggedItems != 0)
{
<div class="col-md-3 col-sm-6 col-xs-6">
<div class="panel panel-back noti-box">
<span class="icon-box bg-color-green set-icon">
<i class="fa fa-exclamation"></i>
</span>
<div class="text-box">
<p class="main-text">@flaggedItems Items</p>
<p class="text-muted"><br />Require attention</p>
</div>
</div>
</div>
}
<div class="col-md-3 col-sm-6 col-xs-6">
<div class="panel panel-back noti-box">
<span class="icon-box bg-color-blue set-icon">
<i class="fa fa-truck"></i>
</span>
<div class="text-box">
<p class="main-text">@vehicles</p>
<p class="text-muted"><br />Vehicles in fleet</p>
</div>
</div>
</div>
</div>
<hr />
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="panel panel-default">
<div class="panel-heading text-center">
<strong>Current Fleet Details</strong>
</div>
<div class="panel-body">
<div class="table-responsive">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title text-center">
<span class=" ">
Click on the reference number to edit vehicle details
</span>
<span class="pull-left"><i class="fa fa-info-circle"></i></span>
<span class="pull-right"><i class="fa fa-info-circle"></i></span>
</h3>
</div>
</div>
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>@Html.DisplayNameFor(m => m.First().Vehicle.RefNumber)</th>
<th>@Html.DisplayNameFor(m => m.First().Vehicle.Make)</th>
<th>@Html.DisplayNameFor(m => m.First().Vehicle.Model)</th>
<th>@Html.DisplayNameFor(m => m.First().Vehicle.Registration)</th>
<th>@Html.DisplayName("Dates")</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr class='@if (item.MotNotRecorded || item.MotExpired || item.TaxNotRecorded || item.TaxExpired)
{
@Html.Raw("danger")
} else if (item.MotWithin30Days || item.MotWithin7Days || item.TaxWithin30Days || item.TaxWithin7Days)
{
@Html.Raw("warning")
}
else
{
@Html.Raw("success")
}'>
<td>
@if (!item.Vehicle.RefNumber.IsNullOrWhiteSpace() || !string.IsNullOrEmpty(item.Vehicle.RefNumber))
{
@Html.ActionLink(item.Vehicle.RefNumber, "Edit", "Portal", new { @ref = item.Vehicle.RefNumber }, null)
}
else
{
@item.Vehicle.RefNumber
}
</td>
<td>
@item.Vehicle.Make
</td>
<td>
@item.Vehicle.Model
</td>
<td>
@item.Vehicle.Registration
</td>
<td>
@Html.LabelFor(modelItem => item.Vehicle.MotDate):
@{
if (item.MotNotRecorded)
{
<span class="pull-right text-warning text-uppercase">
<i class="glyphicon glyphicon-warning-sign"></i>
@string.Format("Not yet recorded")
</span>
}
else
{
<span class="pull-right text-success">
@string.Format("{0:dd/MM/yyyy}", item.Vehicle.MotDate) <i class="glyphicon glyphicon-ok"></i>
</span>
}
}
<br />
@Html.LabelFor(modelItem => item.Vehicle.TaxDate)
@{
if (item.TaxNotRecorded)
{
<span class="pull-right text-warning text-uppercase">
<i class="glyphicon glyphicon-warning-sign"></i>
@string.Format("Not yet recorded")
</span>
}
else
{
<span class="pull-right text-success">
@string.Format("{0:dd/MM/yyyy}", item.Vehicle.TaxDate) <i class="glyphicon glyphicon-ok"></i>
</span>
}
}
</td>
</tr>
}
</tbody>
</table>
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
@Html.PagedListPager(Model, page => Url.Action("Index", new { page }))
</div>
</div>
</div>
</div>
</div>
您的控制器方法缺少 return
语句,但我假设您要返回 portalViewModel
列表。
我建议创建一个具有 IPagedList
个 PortalViewModel
的 ViewModel,并将您需要的值放在包含的 ViewModel 中。然后您可以在每个项目的视图中使用显示模板。
但是,您也可以创建两个 int
变量并在车辆列表的 foreach
循环中递增它们,然后将它们放入 ViewBag。
public ActionResult Index(int? page)
{
var cookie = new HttpCookie("view", "admin");
var portalViewModel = new List<PortalViewModel>();
var vehicles = db.Vehicles.ToList();
var totalNumberOfUrgentItems = 0; // first total
var totalNumberOfItemsRequireingAttention = 0; // second total
foreach (var vehicle in vehicles)
{
var vm = new PortalViewModel { Vehicle = vehicle };
if (vehicle.MotDate == null)
{
vm.MotNotRecorded = true;
vm.NumberOfUrgentItems++;
}
if (vehicle.TaxDate == null)
{
vm.TaxNotRecorded = true;
vm.NumberOfUrgentItems++;
}
if (vehicle.MotDate <= DateTime.Now.AddYears(-1))
{
vm.MotExpired = true;
vm.NumberOfUrgentItems++;
}
if (vehicle.TaxDate != null && DateTime.Now.Subtract((DateTime)vehicle.TaxDate).Days >= 7)
{
vm.TaxWithin7Days = true;
}
else if (vehicle.TaxDate != null && DateTime.Now.Subtract((DateTime)vehicle.TaxDate).Days >= 30)
{
vm.TaxWithin30Days = true;
}
totalNumberOfUrgentItems += vehicle.NumberOfUrgentItems;
totalNumberOfItemsRequireingAttention += vehicle.ItemsRequireingAttention;
portalViewModel.Add(vm);
}
ViewBag["TotalNumberOfUrgentItems"] = totalNumberOfUrgentItems;
ViewBag["TotalNumberOfItemsRequireingAttention"] = totalNumberOfItemsRequireingAttention;
// presumably your return statement is here
}
我在下面定义了以下代码,我想做的是获取以下属性的总和(ItemsRequireingAttention、NumberOfUrgentItems)。
尽管 Model.Count 告诉我视图模型中有多少个视图模型,但我希望能够获得上述 2 个属性的总数。
我试过使用 Model.TotalCountFor 和 Model.Where,但似乎无法使它们正常工作。我下面的当前代码只会告诉我当前查看的子集的总数。这是可能的还是我必须考虑使用 partials
PortalViewModel
public class PortalViewModel
{
public Vehicle Vehicle { get; set; }
public bool MotExpired { get; set; }
public bool TaxExpired { get; set; }
public bool MotWithin7Days { get; set; }
public bool TaxWithin7Days { get; set; }
public bool MotWithin30Days { get; set; }
public bool TaxWithin30Days { get; set; }
public bool MotNotRecorded { get; set; }
public bool TaxNotRecorded { get; set; }
public int NumberOfUrgentItems { get; set; }
public int ItemsRequireingAttention { get; set; }
}
门户控制器
public class PortalController : Controller
{
public ActionResult Index(int? page)
{
var cookie = new HttpCookie("view", "admin");
var portalViewModel = new List<PortalViewModel>();
var vehicles = db.Vehicles.ToList();
foreach (var vehicle in vehicles)
{
var vm = new PortalViewModel { Vehicle = vehicle };
if (vehicle.MotDate == null)
{
vm.MotNotRecorded = true;
vm.NumberOfUrgentItems++;
}
if (vehicle.TaxDate == null)
{
vm.TaxNotRecorded = true;
vm.NumberOfUrgentItems++;
}
if (vehicle.MotDate <= DateTime.Now.AddYears(-1))
{
vm.MotExpired = true;
vm.NumberOfUrgentItems++;
}
if (vehicle.TaxDate != null && DateTime.Now.Subtract((DateTime)vehicle.TaxDate).Days >= 7)
{
vm.TaxWithin7Days = true;
}
else if (vehicle.TaxDate != null && DateTime.Now.Subtract((DateTime)vehicle.TaxDate).Days >= 30)
{
vm.TaxWithin30Days = true;
}
portalViewModel.Add(vm);
}
}
}
查看
@using Microsoft.Ajax.Utilities
@using PagedList
@using PagedList.Mvc;
@using WebApplication1.ViewModels
@model IPagedList<PortalViewModel>
@{
ViewBag.Title = "Dashboard";
var pagedList = (IPagedList)Model;
var urgentItems = Model.Count(i => i.NumberOfUrgentItems >= 1); //(item => item.NumberOfUrgentItems >= 1);
int flaggedItems = Model.Count(i => i.ItemsRequireingAttention >= 1);
int vehicles = Model.Count();
}
<h2>Dashboard</h2>
<hr />
<div class="row">
@if (urgentItems != 0)
{
<div class="col-md-3 col-sm-6 col-xs-6">
<div class="panel panel-back noti-box">
<span class="icon-box bg-color-red set-icon">
<i class="fa fa-warning"></i>
</span>
<div class="text-box">
<p class="main-text">@urgentItems Items</p>
<p class="text-muted">Requiring immediate action</p>
</div>
</div>
</div>
}
@if (flaggedItems != 0)
{
<div class="col-md-3 col-sm-6 col-xs-6">
<div class="panel panel-back noti-box">
<span class="icon-box bg-color-green set-icon">
<i class="fa fa-exclamation"></i>
</span>
<div class="text-box">
<p class="main-text">@flaggedItems Items</p>
<p class="text-muted"><br />Require attention</p>
</div>
</div>
</div>
}
<div class="col-md-3 col-sm-6 col-xs-6">
<div class="panel panel-back noti-box">
<span class="icon-box bg-color-blue set-icon">
<i class="fa fa-truck"></i>
</span>
<div class="text-box">
<p class="main-text">@vehicles</p>
<p class="text-muted"><br />Vehicles in fleet</p>
</div>
</div>
</div>
</div>
<hr />
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="panel panel-default">
<div class="panel-heading text-center">
<strong>Current Fleet Details</strong>
</div>
<div class="panel-body">
<div class="table-responsive">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title text-center">
<span class=" ">
Click on the reference number to edit vehicle details
</span>
<span class="pull-left"><i class="fa fa-info-circle"></i></span>
<span class="pull-right"><i class="fa fa-info-circle"></i></span>
</h3>
</div>
</div>
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>@Html.DisplayNameFor(m => m.First().Vehicle.RefNumber)</th>
<th>@Html.DisplayNameFor(m => m.First().Vehicle.Make)</th>
<th>@Html.DisplayNameFor(m => m.First().Vehicle.Model)</th>
<th>@Html.DisplayNameFor(m => m.First().Vehicle.Registration)</th>
<th>@Html.DisplayName("Dates")</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr class='@if (item.MotNotRecorded || item.MotExpired || item.TaxNotRecorded || item.TaxExpired)
{
@Html.Raw("danger")
} else if (item.MotWithin30Days || item.MotWithin7Days || item.TaxWithin30Days || item.TaxWithin7Days)
{
@Html.Raw("warning")
}
else
{
@Html.Raw("success")
}'>
<td>
@if (!item.Vehicle.RefNumber.IsNullOrWhiteSpace() || !string.IsNullOrEmpty(item.Vehicle.RefNumber))
{
@Html.ActionLink(item.Vehicle.RefNumber, "Edit", "Portal", new { @ref = item.Vehicle.RefNumber }, null)
}
else
{
@item.Vehicle.RefNumber
}
</td>
<td>
@item.Vehicle.Make
</td>
<td>
@item.Vehicle.Model
</td>
<td>
@item.Vehicle.Registration
</td>
<td>
@Html.LabelFor(modelItem => item.Vehicle.MotDate):
@{
if (item.MotNotRecorded)
{
<span class="pull-right text-warning text-uppercase">
<i class="glyphicon glyphicon-warning-sign"></i>
@string.Format("Not yet recorded")
</span>
}
else
{
<span class="pull-right text-success">
@string.Format("{0:dd/MM/yyyy}", item.Vehicle.MotDate) <i class="glyphicon glyphicon-ok"></i>
</span>
}
}
<br />
@Html.LabelFor(modelItem => item.Vehicle.TaxDate)
@{
if (item.TaxNotRecorded)
{
<span class="pull-right text-warning text-uppercase">
<i class="glyphicon glyphicon-warning-sign"></i>
@string.Format("Not yet recorded")
</span>
}
else
{
<span class="pull-right text-success">
@string.Format("{0:dd/MM/yyyy}", item.Vehicle.TaxDate) <i class="glyphicon glyphicon-ok"></i>
</span>
}
}
</td>
</tr>
}
</tbody>
</table>
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
@Html.PagedListPager(Model, page => Url.Action("Index", new { page }))
</div>
</div>
</div>
</div>
</div>
您的控制器方法缺少 return
语句,但我假设您要返回 portalViewModel
列表。
我建议创建一个具有 IPagedList
个 PortalViewModel
的 ViewModel,并将您需要的值放在包含的 ViewModel 中。然后您可以在每个项目的视图中使用显示模板。
但是,您也可以创建两个 int
变量并在车辆列表的 foreach
循环中递增它们,然后将它们放入 ViewBag。
public ActionResult Index(int? page)
{
var cookie = new HttpCookie("view", "admin");
var portalViewModel = new List<PortalViewModel>();
var vehicles = db.Vehicles.ToList();
var totalNumberOfUrgentItems = 0; // first total
var totalNumberOfItemsRequireingAttention = 0; // second total
foreach (var vehicle in vehicles)
{
var vm = new PortalViewModel { Vehicle = vehicle };
if (vehicle.MotDate == null)
{
vm.MotNotRecorded = true;
vm.NumberOfUrgentItems++;
}
if (vehicle.TaxDate == null)
{
vm.TaxNotRecorded = true;
vm.NumberOfUrgentItems++;
}
if (vehicle.MotDate <= DateTime.Now.AddYears(-1))
{
vm.MotExpired = true;
vm.NumberOfUrgentItems++;
}
if (vehicle.TaxDate != null && DateTime.Now.Subtract((DateTime)vehicle.TaxDate).Days >= 7)
{
vm.TaxWithin7Days = true;
}
else if (vehicle.TaxDate != null && DateTime.Now.Subtract((DateTime)vehicle.TaxDate).Days >= 30)
{
vm.TaxWithin30Days = true;
}
totalNumberOfUrgentItems += vehicle.NumberOfUrgentItems;
totalNumberOfItemsRequireingAttention += vehicle.ItemsRequireingAttention;
portalViewModel.Add(vm);
}
ViewBag["TotalNumberOfUrgentItems"] = totalNumberOfUrgentItems;
ViewBag["TotalNumberOfItemsRequireingAttention"] = totalNumberOfItemsRequireingAttention;
// presumably your return statement is here
}