【问题标题】:Cannot get pagination to work with view model asp.net core无法使用视图模型 asp.net 核心进行分页
【发布时间】:2020-02-08 21:56:13
【问题描述】:

我已经查看了这里的其他问题/答案,但似乎没有一个适用于我的 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) });

        }

这是我的错误:

error

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

【问题讨论】:

    标签: asp.net pagination asp.net-core-mvc viewmodel


    【解决方案1】:

    根据您的代码,我们可以发现您的代码 sn-p(如下所示)返回一个匿名对象列表,其中包含 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 });

    并且在这段代码 sn-p await PaginatedList&lt;Employee&gt;.CreateAsync(employeeList.AsNoTracking(), pageNumber ?? 1, pageSize) 处,它无法将匿名对象列表显式转换为 System.Linq.IQueryable,从而导致问题。

    无法从“System.Linq.IQueryable&lt;&lt;anonymous type: MMSystem.Models.Employee Employee, string Supervisor&gt;&gt;”转换为“System.Linq.IQueryable&lt;MMSystem.Models.Employee&gt;

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

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

    此外,您可以参考this tutorial 的示例,展示如何实现分页等功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      相关资源
      最近更新 更多