gpt4 book ai didi

c# - 需要 ASP.NET Core 2.0 分页帮助

转载 作者:太空狗 更新时间:2023-10-30 01:13:40 24 4
gpt4 key购买 nike

再次需要帮助。所以我目前正在研究 ASP.NET Core 2.0 Paging,但它无法正常工作。

我按照这里的教程 https://learn.microsoft.com/en-us/aspnet/core/data/ef-mvc/sort-filter-page

但是,问题是教程使用的是 Entity Framework 数据集还是 IQuery?然而,我正在使用 List<>。有谁知道如何解决这个问题或将我的列表转换为 EF 数据集或其他东西?

Controller 分页.cs:

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);
}

Controller :

public async Task<IActionResult> Index(string sortOrder, string currentFilter, string searchString, int? page)
{
ViewData["CurrentSort"] = sortOrder;
ViewBag.CurrentSort = sortOrder;
var students = addList();

ViewData["NameSortParm"] = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
if (searchString != null)
{
page = 1;
}
else
{
searchString = currentFilter;
}

ViewBag.CurrentFilter = searchString;


switch (sortOrder)
{
case "name_desc":
students = students.OrderByDescending(s => s.Name).ToList();
break;
default:
break;
}

if (searchString != null)
{
page = 1;
}
else
{
searchString = currentFilter;
}

ViewData["CurrentFilter"] = searchString;
int pageSize = 3;
return View(await PaginatedList<Student>.CreateAsync(students.AsNoTracking(), page ?? 1, pageSize));
// return View(PaginatedList<Student>(students, page ?? 1, pageSize));
}

如果您查看上面的代码,它仅适用于从 EF 检索的数据集。

CountAsync()、students.AsNoTracking() 不起作用,因为它是一个列表。

有人知道我该怎么办吗?如果您需要什么,请告诉我。

谢谢!

编辑:

public IQueryable<Student> addList()
{
var studentList = new List<Student>();
studentList.Add(new Student
{
Id = 1,
Name = "David",
ClassName = "Moria"
});

studentList.Add(new Student
{
Id = 2,
Name = "Jenny",
ClassName = "Moria"
});

studentList.Add(new Student
{
Id = 3,
Name = "Crystal",
ClassName = "Moria"
});

studentList.Add(new Student
{
Id = 4,
Name = "jenny",
ClassName = "Moria"
});

studentList.Add(new Student
{
Id = 5,
Name = "Andria",
ClassName = "Moria"
});

studentList.Add(new Student
{
Id = 6,
Name = "Sweet",
ClassName = "Moria"
});

studentList.Add(new Student
{
Id = 7,
Name = "Susan",
ClassName = "Moria"
});
return studentList.AsQueryable();
}

最佳答案

你的 addList()只是在内存中创建一组硬编码数据。使用异步方法(实际上会降低性能)或使用 IQueryable 是没有意义的(您没有查询外部数据源)。

我建议重命名您的 addlist更有意义的方法,比如FetchStudents() .自从您生成 List<Student>在方法中,它应该返回 IList<Student>

public IList<Student> FetchStudents()
{
....
return studentList;
}

接下来更改 CreateAsync()接受方法IEnumerable<T>并删除异步调用

public static PaginatedList<T> Create(IEnumerable<T> source, int pageIndex, int pageSize)
{
var count = source.Count();
var items = source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
return new PaginatedList<T>(items, count, pageIndex, pageSize);
}

最后修改Index()方法

public IActionResult Index(string sortOrder, string currentFilter, string searchString, int? page)
{
....
var students = FetchStudents();
....
return View(PaginatedList<Student>.Create(students, page ?? 1, pageSize));
}

关于c# - 需要 ASP.NET Core 2.0 分页帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48759880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com