나는 차량용 목록을 검색, 필터링 및 나열 할 수있는 간단한 ASP.NET MVC 응용 프로그램을 보유하고 있습니다.저장소에서 정렬 및 페이징
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));
}
: 나는이 내 "VehicleMakeController"이고 "인덱스"조치 그래서
유튜브 https://www.youtube.com/watch?v=srN56uxw76s에 kudvenkat 에서 자습서 다음, 정렬 ("인덱스"행동에) 컨트롤러에 필터링 및 페이징 구현
는이 내 "인덱스"이다 : 응용 프로그램에서
@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"입니다 :
public class VehicleRepository : IVehicleRepository
{
private readonly VehicleDbContext _context;
public VehicleRepository(VehicleDbContext context)
{
_context = context;
}
public IEnumerable<VehicleMake> AllMakes => _context.VehicleMakes;
}
는이 내 "IVehicleRepository"인터페이스 :
public interface IVehicleRepository
{
IEnumerable<VehicleMake> AllMakes { get; }
}
내 DbContext 클래스는 다음입니다 :
public class VehicleDbContext : DbContext
{
public VehicleDbContext() : base("VehicleDbContext")
{
}
public DbSet<VehicleMake> VehicleMakes { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
이 모든 것이 OK 작동, 하지만 지금 저장소에서 정렬 및 페이징을 구현하고 컨트롤러에서 제거하려고합니다. 매개 변수는 get/query 메소드를 통해 전달되어야합니다. 나는 이것을 어떻게하는지 모르겠다. 나는 어떤 도움에 감사 할 것이다.