Как сделать пагинацию и фильтрацию в приложениях MVC - PullRequest
0 голосов
/ 31 июля 2009

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

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

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

Пока все хорошо.

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

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

Как я могу пейджинг и фильтр?

index.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>

1 Ответ

1 голос
/ 31 июля 2009

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

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

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

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

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

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

<%= Html.Pager(ViewData.Model.PageSize, ViewData.Model.PageNumber, ViewData.Model.TotalItemCount, new { categoryname = ViewData["CategoryDisplayName"] } )%>
...