繁体   English   中英

如何在 ASP.NET 核心中使用存储库模式进行排序?

[英]How to sort using repository pattern in ASP.NET core?

我在尝试使用存储库模式为我的项目实现排序功能时遇到问题。 我看过的所有教程都使用通过数据库进行排序,而我只是尝试对存储库中存在的一些硬编码对象进行排序。

对象类

public class Object
{
     [HiddenInput]
     public int ObjectId { get: set; }
     public string Name { get; set; }
}

IObjectRepository 接口

public interface IObjectRepository
{
     IEnumerable<Object> GetAllObjects();
     //public List<Object> ObjectSort(string sortOrder);
}

ObjectRepository 类

public class ObjectRepository : IObjectRepository
{
     private List<Object> _objectList;
     public ObjectRepository()
     {
          _objectList = new List<Object>()
          {
               new Object { ObjectId = 1, Name = "Math"},
               new Object { ObjectId = 2, Name = "Science"}
          };
     }
     public IEnumerable<Object> GetAllObjects()
     {
          return _objectList;
     }
     //public List<Object> ObjectSort(string sortOrder) method
}

家庭控制器

public class HomeController : Controller
{
     private readonly IObjectRepository _objectRepository;
     
     public HomeController(IObjectRepository objectRepository)
     {
          _objectRepository = objectRepository;
     }
     public IActionResult Index()
     {
          return View();
     }
     public IActionResult ObjectList()
     {
          return View(_objectRepository.GetAllObjects());
     }
     public IActionResult Sort(string sortOrder)
     {
          ViewData["NameSortParm"] = String.IsNullorEmpty(sortOrder) ? "name_desc" : "";
          var objects = from s in _objectRepository.GetAllObjects()
                        select s;
          switch (sortOrder)
          {
               case "name_desc":
                    objects = objects.OrderByDescending(s => s.Name);
                    break;
               default:
                    objects = objects.OrderBy(s => s.Name);
                    break;
          }
          return View("ObjectList");
     }
}

注释掉的行表明我知道应该有一些东西应该放在那里,但我观看的教程在这些模型中没有任何内容。 我试图通过在我的 ObjectList 视图中单击 Name 的表头进行排序,它或多或少看起来像这样。

<th>
    <a asp-action="ObjectList" asp-route-sortOrder="@ViewData["NameSortParm"]">@Html.DisplayNameFor(model => model.Name)</a>
</th>

我被困住了,不确定该怎么做。 我得到的最远的是单击名称的表标题,但页面无法显示我尝试排序的对象。 任何帮助将非常感激。

您只需要一个ObjectList操作,如下所示:

public IActionResult ObjectList(string sortOrder)
{
    ViewData["NameSortParm"] = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
    var objects = from s in _objectRepository.GetAllObjects()
                    select s;
    switch (sortOrder)
    {
        case "name_desc":
            objects = objects.OrderByDescending(s => s.Name);
            break;
        default:
            objects = objects.OrderBy(s => s.Name);
            break;
    }
    return View(objects);
}

看法:

@model IEnumerable<MyObject>
@{
    ViewData["Title"] = "ObjectList";
}

<h1>ObjectList</h1>

<table>
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.ObjectId)
            </th>
            <th>
                <a asp-action="ObjectList" asp-route-sortOrder="@ViewData["NameSortParm"]">@Html.DisplayNameFor(model => model.Name)</a>
            </th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
        <tr>
            <td>
                @Html.DisplayFor(m => item.ObjectId)
            </td>
            <td>
                @Html.DisplayFor(m => item.Name)
            </td>
        </tr>
        }

    </tbody>
</table>

结果:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM