在存储库上排序和分页

编程入门 行业动态 更新时间:2024-10-26 08:22:02
本文介绍了在存储库上排序和分页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一个简单的ASP.NET MVC应用程序,它可以搜索,过滤和分页车辆清单.我按照 kudvenkat 在youtube www.youtube/watch?v=srN56uxw76s

I have a simple ASP.NET MVC application which has possibility to search, filter and page a list of vehicle makes. I implemented sorting, filtering and paging on controller (on "Index" action) following the tutorials from kudvenkat on youtube www.youtube/watch?v=srN56uxw76s

因此,这是我的"VehicleMakeController"和"Index"操作:

So, this is my "VehicleMakeController" and "Index" action:

public class VehicleMakeController : Controller { private readonly IVehicleRepository _vehicleRepository; public VehicleMakeController() { _vehicleRepository = new VehicleRepository(new VehicleDbContext()); } // GET: VehicleMake public ActionResult Index(string search, int? page, string sort) { ViewBag.SortNameParameter = string.IsNullOrEmpty(sort) ? "Name desc" : ""; var makes = _vehicleRepository.AllMakes; switch (sort) { case "Name desc": makes = makes.OrderByDescending(x => x.Name); break; default: makes = makes.OrderBy(x => x.Name); break; } if (search == null) { return View(makes.ToList().ToPagedList(page ?? 1, 5)); } return View(makes.Where(x => x.Name.ToLower().StartsWith(search)).ToList().ToPagedList(page ?? 1, 5)); }

这是我的索引"视图:

@using PagedList; @using PagedList.Mvc; @model IPagedList<Project.Service.Entities.VehicleMake> @{ ViewBag.Title = "Vehicle Makes"; } <h2>@ViewBag.Title</h2> @Html.ActionLink("Create", "CreateVehicleMake") <br/> <br/> @using (@Html.BeginForm("Index", "VehicleMake", FormMethod.Get)) { <p> @Html.TextBox("search") <input type="submit" value="Search"/> </p> } <table class="table"> <thead> <tr> <th>@Html.ActionLink("Name", "Index", new { sort = ViewBag.SortNameParameter, search = Request.QueryString["search"] })</th> <th></th> </tr> </thead> <tbody> @foreach (var vehicleMake in Model) { <tr> <td>@vehicleMake.Name</td> <td>@Html.ActionLink("Edit", "EditVehicleMake", new {id = vehicleMake.Id})</td> <td>@Html.ActionLink("Delete", "DeleteVehicleMake", new {id = vehicleMake.Id})</td> </tr> } </tbody> </table> @Html.PagedListPager(Model, page => Url.Action("Index", new { page, search = Request.QueryString["search"], sort = Request["sort"]}), new PagedListRenderOptions() { Display = PagedListDisplayMode.IfNeeded, DisplayPageCountAndCurrentLocation = true}) @if (!Model.Any()) { <b>No rows match search criteria!</b> }

在应用程序中,我使用的是存储库模式,并且我有"AllMakes"方法来从数据库中检索所有车辆制造商.因此,这是我的"VehicleRepository":

In application I'm using repository pattern and I have "AllMakes" method to retrieve all vehicle makes from database. So, this is my "VehicleRepository":

public class VehicleRepository : IVehicleRepository { private readonly VehicleDbContext _context; public VehicleRepository(VehicleDbContext context) { _context = context; } public IEnumerable<VehicleMake> AllMakes => _context.VehicleMakes; }

这是我的"IVehicleRepository"界面:

and this is my "IVehicleRepository" interface:

public interface IVehicleRepository { IEnumerable<VehicleMake> AllMakes { get; } }

我的DbContext类如下:

My DbContext class is following:

public class VehicleDbContext : DbContext { public VehicleDbContext() : base("VehicleDbContext") { } public DbSet<VehicleMake> VehicleMakes { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { } }

这一切正常,但是现在我想在存储库中实现排序和分页并将其从控制器中删除.参数应通过get/query方法传递.我不确定如何执行此操作,希望对您有所帮助.

This everything works OK, but now I want to implement sorting and paging in repository and remove it from controller. The parameters should be passed trough get/query method. I'm not sure how to do this and I would appreciate any help.

推荐答案

您可以在IVehicleRepository中声明一个函数并实现它.

You can declare a function in IVehicleRepository and implement it.

public interface IVehicleRepository { IEnumerable<VehicleMake> AllMakes { get; } List<VehicleMake> GetVehicleWithPagination(string search, int? page, string sort); } public class VehicleRepository : IVehicleRepository { // your old code public List<VehicleMake> GetVehicleWithPagination(string search, int? page, string sort) { // this is your code from controller switch (sort) { case "Name desc": makes = AllMakes.OrderByDescending(x => x.Name); break; default: makes = AllMakes.OrderBy(x => x.Name); break; } if (search == null) { return AllMakes.ToList().ToPagedList(page ?? 1, 5); } } }

还有您的控制器:

public ActionResult Index(string search, int? page, string sort) { ViewBag.SortNameParameter = string.IsNullOrEmpty(sort) ? "Name desc" : ""; return View(_vehicleRepository.GetVehicleWithPagination(search, page, sort)); }

更多推荐

在存储库上排序和分页

本文发布于:2023-06-13 09:33:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/678978.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:分页

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!