Asp.net查询和排序项目
本文关键字:排序 项目 查询 net Asp | 更新日期: 2023-09-27 18:08:23
做一些asp.net mvc5来熟悉它。我这样做了,所以我有项目,每个项目都有一个状态等工作进行中,关闭,完成等。
我想做的是创建一个foreach循环来创建一个项目状态列表,然后在该选项卡下列出具有正确状态的项目。
这是我到目前为止所做的
@using (Html.BeginForm("Index", "Projects", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
var allProjects = ViewData["allProjects"] as List<Project>;
foreach (var project in allProjects)
{
<div>project.ProjectStatus.Name</div>
}
}
这将如何在项目列表中列出每个项目的项目状态,所以我得到1,工作进行中,而不是10完成。
这是我以前的视图
if (allProjects != null)
{
<div class="panel-group accordion" id="accordion1">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion1" href="#collapse_1">
Inhouse projekt
</a>
</h4>
</div>
<div id="collapse_1" class="panel-collapse collapse">
<div class="panel-body">
@{
Html.RenderPartial("Projects", allProjects.Where(x => x.ProjectStatu.Name == "Pågående - Inhouse"));
}
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion1" href="#collapse_2">
Outhouse projekt
</a>
</h4>
</div>
<div id="collapse_2" class="panel-collapse collapse">
<div class="panel-body">
@{
Html.RenderPartial("Projects", allProjects.Where(x => x.ProjectStatu.Name == "Pågående - Outhouse"));
}
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion1" href="#collapse_4">
Avslutade projekt
</a>
</h4>
</div>
<div id="collapse_4" class="panel-collapse collapse">
<div class="panel-body">
@{
Html.RenderPartial("Projects", allProjects.Where(x => x.ProjectStatu.Name == "Avslutat"));
}
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion1" href="#collapse_3">
Övriga projekt
</a>
</h4>
</div>
<div id="collapse_3" class="panel-collapse collapse">
<div class="panel-body">
@{
Html.RenderPartial("Projects", allProjects.Where(x => x.ProjectStatu.Name != "Pågående - Inhouse" && x.ProjectStatu.Name != "Pågående - Outhouse" && x.ProjectStatu.Name != "Avslutat"));
}
</div>
</div>
</div>
</div>
就像我们在这里看到的,我只是硬编码项目状态,然后在该状态下呈现每个项目,如果它匹配字符串。但我宁愿不硬编码这个,以防我要在以后添加另一个项目状态,我也必须改变视图。
和我的项目负责人。
[Authorize]
public class ProjectsController : Controller
{
public ActionResult Index(FormCollection form)
{
using (DatabaseLayer db = new DatabaseLayer())
{
ViewData["projectList"] = new SelectList(db.GetConsultantProjects(Constants.CurrentUser(User.Identity.Name)), "ProjectId", "ProjectName");
ViewData["allProjects"] = db.GetAllProjects().OrderByDescending(x => x.StartDate).ToList();
if (form != null && form.AllKeys.Length > 0)
{
var projects = from x in form.AllKeys where x.Length >= 3 && x.Substring(0, 3) == "cb-" && form[x] == "true,false" select new Guid(x.Substring(3));
db.UpdateConsultantProjectMemberships(Constants.CurrentUser(User.Identity.Name), projects);
ViewData["posted"] = true;
}
}
return View();
}
public ActionResult Projects()
{
return View();
}
public ActionResult ConsulantTimes()
{
using (DatabaseLayer db = new DatabaseLayer())
{
ViewData["times"] = db.GetConsultantProjectTimes(Constants.CurrentUser(User.Identity.Name)).OrderByDescending(x => x.StartDate).ToList();
}
return PartialView();
}
public ActionResult Delete(Guid? id)
{
if (id.HasValue)
new DatabaseLayer().DeleteConsultantProjectTime(id.Value);
return null;
}
public ActionResult Update(Guid? projectId, DateTime? startDate, DateTime? endDate, int? pct, Guid? id)
{
if (projectId.HasValue && startDate.HasValue && endDate.HasValue && pct.HasValue)
new DatabaseLayer().UpdateConsultatProjectTime(projectId.Value, Constants.CurrentUser(User.Identity.Name), startDate.Value, endDate.Value, pct.Value, id);
return null;
}
}
通过查看您的旧视图,我认为这是相当简单的:
@using (Html.BeginForm("Index", "Projects", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
var allProjects = ViewData["allProjects"] as List<Project>;
var allProjectStatuses = ViewData["allStatuses"] as List<ProjectStatus>;
foreach (var project in allProjectStatuses)
{
<div>
Html.RenderPartial("Projects", allProjects.Where(x => x.ProjectStatus.Name == project));
</div>
}
}
更新控制器:
public ActionResult Index(FormCollection form)
{
using (DatabaseLayer db = new DatabaseLayer())
{
ViewData["projectList"] = new SelectList(db.GetConsultantProjects(Constants.CurrentUser(User.Identity.Name)), "ProjectId", "ProjectName");
ViewData["allProjects"] = db.GetAllProjects().OrderByDescending(x => x.StartDate).ToList();
// Set ViewData allStatuses to store all project statuses from DB
ViewData["allStatuses"] = db.GetAllProjectStatuses().ToList();
if (form != null && form.AllKeys.Length > 0)
{
var projects = from x in form.AllKeys where x.Length >= 3 && x.Substring(0, 3) == "cb-" && form[x] == "true,false" select new Guid(x.Substring(3));
db.UpdateConsultantProjectMemberships(Constants.CurrentUser(User.Identity.Name), projects);
ViewData["posted"] = true;
}
}
return View();
}
我的建议是循环遍历可用的projectStatus并呈现div,如下所示:
@using (Html.BeginForm("Index", "Projects", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
var allProjectsStatus = ViewData["allProjectsStatus"] as List<ProjectStatus>;
var allProjects = ViewData["allProjects"] as List<Project>;
<div class="panel-group accordion" id="accordion1">
foreach (var projectStatus in allProjectsStatus)
{
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion1" href="#collapse_1">
@projectStatus
</a>
</h4>
</div>
<div id="collapse_1" class="panel-collapse collapse">
<div class="panel-body">
@{
Html.RenderPartial("Projects", allProjects.Where(x => x.ProjectStatu.Name == projectStatus));
}
</div>
</div>
</div>
}
</div>
}