Невозможно заставить нумерацию страниц работать с моделью вида asp. net core - PullRequest
0 голосов
/ 09 февраля 2020

Я проверил здесь другие вопросы / ответы, но ни один из них не работал с моим сенарио.

Вот моя модель представления:

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

        }

И это моя ошибка:

ошибка

Я пытался все, чтобы получить его работать, но, кажется, всегда есть проблемы преобразования или типа конфликта. (Примечание: перед попыткой добавления нумерации страниц все работало нормально)

1 Ответ

0 голосов
/ 10 февраля 2020

На основании вашего кода мы можем обнаружить, что ваш фрагмент кода (как показано ниже) возвращает список анонимных объектов, который содержит Employee и Supervisor свойства.

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>> 'to' System.Linq.IQueryable<MMSystem.Models.Employee> '

Чтобы исправить это, вы можете попробовать изменить код, как показано ниже.

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

Кроме того, вы можете обратиться к this учебное пособие с примером, демонстрирующим, как реализовать функциональность paging et c.

...