【发布时间】:2016-10-28 12:45:16
【问题描述】:
我正在编写一个 .Net Core 应用程序,大约在 3 周前开始后,我已经掌握了它。
我可以使用实体框架 (EF) 访问在线数据库。我有 4 个控制器控制 4 种不同类型的视图类别(每个类别包含 5 个视图(索引、删除、创建、编辑和详细信息))。每个控制器都在其 index 方法中创建一个 PaginatedList ,其中包含我在程序中拥有的 4 种模型类型中的任何一种。这用于根据不同的属性对列表中的项目进行排序。
分页列表.cs
public class PaginatedList<T> : List<T>
{
public int PageIndex { get; private set; }
public int TotalPages { get; private set; }
public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
TotalPages = (int)Math.Ceiling(count / (double)pageSize);
this.AddRange(items);
}
public bool HasPreviousPage
{
get
{
return (PageIndex > 1);
}
}
public bool HasNextPage
{
get
{
return (PageIndex < TotalPages);
}
}
public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize)
{
var count = await source.CountAsync();
var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
return new PaginatedList<T>(items, count, pageIndex, pageSize);
}
}
关于 PaginatedList 的想法是我的数据库会随着时间增长,我想限制显示的项目数。
我已经实现了一小段代码,它用“成功”类标记表中的选定项目。一旦发生这种情况,我想抓取“选择”的项目并将其传递给 PartialView 以便我可以显示它的属性,但是由于使用 PaginatedList 作为模型,我很难访问我想要的项目。我希望这里有人可以解决这个问题?
以下部分是我尝试将我的用户传递给我的 PartialView 的地方:
UserController 索引方法
public async Task<IActionResult> Index(
int? page,
int? id)
{
....
if (id != null)
{
ViewData["UserID"] = id.Value;
}
....
var users = from u in _context.Users select u;
return View(await PaginatedList<User>.CreateAsync(users.AsNoTracking(), page ?? 1, pageSize));
}
用户索引.cshtml
@model PaginatedList<Project.Models.User>
....
@if (itemSelected) //true if item is selected - false otherwise.
{
int elementID = (int)ViewData["ElementID"];
<h4>@elementID</h4> //this return the id of the item that was selected
//var user = Model.ElementAt<User>(elementID); //This is causing me trouble.
@Html.Partial("PartialUserDetails", user)
}
如前所述,PaginatedList 是上述代码中的“模型”,所以要么我必须将我的 DbContext 添加到其中(不知道是否可能)并使用 elementID 我应该获取用户或者我必须想出一种不同的方式来获取用户。虽然 PaginatedList 能够根据不同的标准对我的项目进行排序,所以这些项目不会以时间顺序出现。例如
1, 2, 3, 4, 5
而是
2, 1, 5, 4, 3
我希望这里有人可以解决我的问题。
【问题讨论】:
标签: c# asp.net asp.net-mvc entity-framework view