mvc中的数据排序

Data sorting in mvc

我对 ASP.net MVC.In 我的项目真的很陌生,我有 2 个模型。 Person.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace CleryAct.Models
{
    public class Person
    {
        [Key]
        public string rockets { get; set; }
        public bool csa { get; set; }
        public string fname { get; set; }
        public string lname { get; set; }
        public string email { get; set; }

        public virtual ICollection<Session> Sessions { get; set; }
    }
}

Session.cs

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace CleryAct.Models
{
    public class Session
    {

        [Key]
        public int ID { get; set; }
        public string rockets { get; set; }
        public virtual Person Person { get; set; }
        public DateTime training { get; set; }


    }
}

我还有 1 个视图文件夹,其中包含详细信息和索引视图。我通过在控制器下添加一个新的脚手架项目并将其链接到我的个人模型来创建它。在我的详细信息文件夹中,我试图对出现的日期列表进行排序。我不知道如何在我的排序函数中调用日期。人员控制器详细信息 .cs

public ActionResult Details(string id, string sortOrder)
{
    ViewBag.CurrentSort = sortOrder;
    ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    Person person = db.Persons.Find(id);
    if (person == null)
    {
        return HttpNotFound();
    }
    var persons = from s in db.Persons select s;

    switch (sortOrder)
    {
        default:
            persons = persons.OrderBy(s => s.Sessions);
            break;
        case "date_desc":
            persons = persons.OrderByDescending(s => s.Sessions);
            break;
    }
    return View(person);
}

详情查看代码

<h2>Details</h2>

<div>
  <h4>Person</h4>
  <hr />
  <dl class="dl-horizontal">

    <dt>
            @Html.DisplayNameFor(model => model.lname), @Html.DisplayNameFor(model => model.fname) 
        </dt>

    <dd>
      @Html.DisplayFor(model => model.lname), @Html.DisplayFor(model => model.fname)
    </dd>

    <dt>
            @Html.DisplayNameFor(model => model.rockets)
        </dt>

    <dd>
      @Html.DisplayFor(model => model.rockets)
    </dd>

    <dt>
            @Html.DisplayNameFor(model => model.email)
        </dt>

    <dd>
      @Html.DisplayFor(model => model.email)
    </dd>
    <br />
    <br />
    <dt>
            @Html.DisplayNameFor(model => model.Sessions)
        </dt>
    <dd>
      <table class="table">
        @foreach (var item in Model.Sessions) {
        <tr>
          <td>
            @Html.DisplayFor(modelItem => item.training)
          </td>
        </tr>
        }
      </table>
    </dd>

  </dl>
</div>
<p>
  @Html.ActionLink("Edit", "Edit", new { id = Model.rockets }) | @Html.ActionLink("Back to List", "Index")
</p>

case "date_desc":
  persons = persons.OrderByDescending(s => s.Sessions.Select(t => t.training));
  break;

.Select() 将从课程中创建培训日期的集合供您订购。

试试这个代码

public ActionResult Details(string id, string sortOrder)
{
    // don't know what logic stands behind these ViewBag usages.
    // maybe you should get rid of them
    ViewBag.CurrentSort = sortOrder;
    ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    // changes start
    Person person = db.Persons.Include(x => x.Sessions).FirstOrDefault(p => p.rockets == id);
    if (person == null)
        return HttpNotFound();
    person.Sessions = sortOrder == "date_desc" ? 
        person.Sessions.OrderByDescending(s => s.training).ToList() : 
        person.Sessions.OrderBy(s => s.training).ToList();
    // changes end
    return View(person);
}

您必须在 Person class 上缺少 id 字段。另外为什么不使用 int id 而不是 string id 呢? Session - public int ID { get; set; }.

中有整数 id

你只需要这个:

switch (sortOrder)
{
    case "date_desc":
        person.Sessions = person.Sessions
                                .OrderByDescending(session => session.Training);
        break;
    default:
        person.Sessions = person.Sessions
                                .OrderBy(session => session.Training);
        break;

}

没有任何理由获取所有 persons 然后根据会话对它们进行排序。这没有意义。您唯一需要做的就是订购一个人的会议。