![](/img/trans.png)
[英]Using interface and abstract class in repository pattern in ASP.NET Core
[英]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.