做一些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(); }更多推荐
发布评论