无法使分页与视图模型 asp.net 核心一起使用



我已经在这里查看了其他问题/答案,但似乎没有一个适用于我的Senario。

这是我的视图模型:

public class EmployeeListViewModel
{
public Employee Employee { get; set; }
public PaginatedList<Employee> Employees { get; set; }
public string Supervisor { get; set; }
}

顶部视图:

@model MMSystem.ViewModels.EmployeeListViewModel

控制器:

public async Task<IActionResult> Index(string searchString, string currentFilter, int? pageNumber)
{
if (searchString != null)
{
pageNumber = 1;
}
else
{
searchString = currentFilter;
}
ViewData["CurrentFilter"] = searchString;

var employeeList = (from e in _context.Employees
join s in _context.Employees on e.Id equals s.SupervisorId
select new { Employee = s, Supervisor = e.FullName });

if (!String.IsNullOrEmpty(searchString))
{
employeeList = employeeList.Where(e => e.Employee.LastName.Contains(searchString)
||e.Employee.FirstName.Contains(searchString));
}
int pageSize = 3;
return View(new EmployeeListViewModel { Employees = await PaginatedList<Employee>.CreateAsync(employeeList.AsNoTracking(), pageNumber ?? 1, pageSize) });
}

这是我的错误:

错误

我一直在尝试一切让它工作,但似乎总是存在转换或类型冲突问题。(注意:在尝试添加分页之前一切正常(

根据您的代码,我们可以发现您的代码片段(如下所示(返回包含EmployeeSupervisor属性的匿名对象列表。

var employeeList = (from e in _context.Employees join s in _context.Employees on e.Id equals s.SupervisorId select new { Employee = s, Supervisor = e.FullName });

在这个代码片段await PaginatedList<Employee>.CreateAsync(employeeList.AsNoTracking(), pageNumber ?? 1, pageSize),它不能显式地将匿名对象列表转换为System.Linq.IQueryable,这导致了问题。

无法从 'System.Linq.IQueryable<<anonymous type: MMSystem.Models.Employee Employee, string Supervisor>>' 转换为 'System.Linq.IQueryable<MMSystem.Models.Employee>'

要修复它,您可以尝试修改代码,如下所示。

return View(new EmployeeListViewModel { Employees = await PaginatedList<Employee>.CreateAsync(employeeList.Select(s=>s.Employee).AsNoTracking(), pageNumber ?? 1, pageSize) });

此外,您可以参考本教程的示例,该示例显示了如何实现分页等功能。

最新更新