asp.net foreach和sort项目(asp.net foreach and sort projects)

编程入门 行业动态 更新时间:2024-10-17 19:25:47
asp.net foreach和sort项目(asp.net foreach and sort projects)

做一些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; } }

doing some asp.net mvc5 to get more familiar with it. I've made it so I have projects, and each project have a status etc working in progress, closed, finished etc..

What I Want to do is I want to make a foreach loop to Make a list of the project statuses and than list the project with the right status under that tab.

This is what i've done so far

@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> } }

How ever this would just list the project status of each project in the projectlist, so I get 1, work in progress than 10 finished.

This is my old view

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>

Like we can see here I did just hard code the project status, and than render each project under that status if it matches the string. But i'd rather not hard code this incase I were to add another project status at a later date I would have to change the view as well.

And my project Controller.

[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(); }

By looking at your old view I think this is rather simple :

@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> } }

Update 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(); // 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(); }

更多推荐

本文发布于:2023-04-28 05:18:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1330340.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:项目   net   asp   foreach   projects

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!