Как выполнить разбивку на страницы и фильтрацию в приложениях MVC

StackOverflow https://stackoverflow.com/questions/1209709

Вопрос

Я использую следующий пример мартину Боланду на страницу.

URL-адрес моего приложения меняется, когда я нажимаю на номера страниц:

http://localhost:1202/Issue?page=6

Пока все идет хорошо.

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

Если я изменю свой выпадающий список, я должен передать ProjectID в запросе, мое представление partail обновится и отобразит мои отфильтрованные записи.
Теперь, когда я просматриваю страницу, параметр filter не заносится в строку запроса, так же как и выбор в моем выпадающем списке не заносится.

Как я могу перелистывать страницы, а также фильтровать?

Индекс.aspx

<form id="form-post-project-selection" class="post-comments" method="get">
 <label for="Country">Project:</label>
 <%= Html.DropDownList("ProjectList", "--All--") %>
</form>

<% Html.RenderPartial("MyIssues", Model); %>

<script type="text/javascript">
         $("#form-post-project-selection").submit(function(evt) {
         var frm = $("#form-post-project-selection");
         var action = frm.attr("action");
         var serializedForm = frm.serialize();
         var projectId = jQuery.trim($("ProjectList").val());
         if (projectId.length < 1 || projectId == "-1")
             return;
     });
     $("#ProjectList").change(function() {
         $("#form-post-project-selection").submit();
     });
</script>
Это было полезно?

Решение

Я думаю, у вас здесь есть пара вариантов.

Первым было бы использовать Ajax для обратного вызова контроллера, чтобы вернуть "выгруженную" коллекцию объектов обратно, поэтому каждый раз, когда вы фильтруете выходные данные, вы возвращаете идентификатор фильтра, чтобы получить только те коллекции результатов, которые вам нужны для нужной страницы.Вы также можете выполнить подкачку с помощью Ajax, передав обратно идентификатор фильтра с помощью вызова Ajax, чтобы вы получили отфильтрованный и выгруженный объект обратно, или вы могли бы перенаправить на другой URL-адрес при подкачке, описанный ниже.

Если вы используете полностраничную обратную передачу на сервер при изменении значения в выпадающем списке, то вы могли бы перенаправить пользователя на другой URL-адрес с указанным в нем идентификатором фильтра, например.Проблема/Фильтр/1

Таким образом, каждый раз, когда используются ссылки подкачки, вы будете получать URL-адрес типа Issue /Filter / 1?page = 6, и вы не потеряете свой фильтр.

Пожалуйста, обратите внимание, что вид страницы меняться не обязательно.

Несмотря на то, что функция заканчивается одинаково, ответ на этот вопрос есть в комментариях ниже и размещен здесь для удобства.

<%= Html.Pager(ViewData.Model.PageSize, ViewData.Model.PageNumber, ViewData.Model.TotalItemCount, new { categoryname = ViewData["CategoryDisplayName"] } )%>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top