@M-Misha-M
горе-junior, программирую на C#, изучаю .Net

Как заставить работать пагинацию используя PartialView() с Ajax.BeginForm()?

Здравствуйте! Использую Ajax.Beginform() для сортировки списка товаров на своём сайте без перезагрузки всей страницы, для этого я использую в контроллере 2 метода, первый вот этот
public ActionResult List(string category, int page = 1)
        {
            ListViewModel model = new ListViewModel
            {
                Fields = new List<SelectListItem>
                {
                   new SelectListItem { Text = "Order By Descending", Value = "OrderByDescending" },
                   new SelectListItem { Text = "Order By Ascending", Value = "OrderByAscending" },
                },
                Furnitures = repository.Furnitures
                .Where(p => category == null || p.Category.Name == category)
                .Skip((page - 1) * pageSize)
                .Take(pageSize)
                .ToList(),
                InfoPages = new InfoPage
                {
                    CurrentPage = page,
                    ItemsPerPage = pageSize,
                    TotalItems = category == null ? repository.Furnitures.Count() :
                    repository.Furnitures.Where(furniture => furniture.Category.Name == category).Count()
                },
                CurrentCategory = category,
               
            };
            return View(model);
        }

Этот метод который делает пагинацию и навигацию , вот второй который возвращает PartialView()
public ActionResult Summary(string SelectedValue)
        {
            ViewBag.CurrentSort = SelectedValue;
            IEnumerable<Furniture> result = repository.Furnitures;
            if (SelectedValue != null)
            {
                if (SelectedValue.Equals("OrderByDescending"))
                {
                    result = repository.Furnitures.OrderBy("Price desc")
                .ToList();


                }
                else if (SelectedValue.Equals("OrderByAscending"))
                {
                    result = repository.Furnitures.OrderBy("Price asc").ToList();
                }
                else
                {
                    result = repository.Furnitures.OrderBy("FurnitureId").ToList();

                }

            }
            return PartialView(result);
        }

Вызываю PartialView в вьюшке List так
<div class="container" id="tableBody" >                
@Html.Action("Summary")         
</div>

В самой partial view прохожусь циклом foreach по всем товарам
Использую для сортировки dropdown , ajax работает хорошо за одним исключением, теперь не работает пагинация и соответственно навигация по категориям, то есть всё товары отображаются на одной странице, я понимаю что проблема в логике в методе Summary, так как я по сути только возвращаю все товары из БД. но каким образом мне прикрутить пагинацию с навигацией в моём partial View методе?? Я там возвращаю IEnumerable, и прошу вашего совета или помощи как мне поступить.Спасибо
  • Вопрос задан
  • 197 просмотров
Решения вопроса 1
@kttotto
пофиг на чем писать
Ну так Вы фильтруете данные только при загрузке страницы, а в Summary фильтрации нет, Вы берете все Furnitures и только сортируете, поэтому при клике на другую страницу выдаст все что у Вас есть. Попробуйте вынести фильтрацию из List в отдельный метод и применить ее так же и к result в Summary.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы