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

Asp.net查询和排序项目

通过查看您的旧视图,我认为这是相当简单的:

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