0
私はシンプルなASP.NET MVCアプリケーションを用意しています。私はそうリポジトリの並べ替えとページング
https://www.youtube.com/watch?v=srN56uxw76sユーチューブ上の kudvenkatからチュートリアル以下(「インデックス」アクションで)コントローラのソート、フィルタリングやページングを実装し、これが私の「VehicleMakeController」であり、「インデックス」アクション:
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));
}
私は、リポジトリのパターンを使用していると私はすべての車両を取得する方法は、データベースから作る「AllMakes」を持っているアプリケーションで
@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>
}
:
、これが私の「インデックス」の図です。 、
public class VehicleDbContext : DbContext
{
public VehicleDbContext() : base("VehicleDbContext")
{
}
public DbSet<VehicleMake> VehicleMakes { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
このすべてがOKに動作しますので、これは私の "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クラスには、次のさ今はリポジトリに並べ替えとページングを実装し、それをコントローラから削除したいと考えています。パラメータは、get/queryメソッドを通じて渡される必要があります。私はこれを行う方法がわかりませんし、私はどんな助けにも感謝します。