MVC 애플리케이션에서 페이지 매김 및 필터링 방법
-
06-07-2019 - |
문제
나는 예제를 사용하고 있습니다 Martijn Boland 's 페이지로.
페이지 번호를 클릭하면 내 앱의 URL이 변경됩니다.
http://localhost:1202/Issue?page=6
여태까지는 그런대로 잘됐다.
문제는 변경시 제출 한 드롭 다운 목록을 추가 할 때 필터뿐만 아니라 페이지를 페이지에 넣을 수 없습니다.
드롭 다운을 변경하면 쿼리 스팅에서 ProjectID를 전달해야합니다. 부품보기가 새로 고쳐지고 필터링 된 재활용을 표시합니다.
이제 페이지를 표시하면 필터 매개 변수가 쿼리 스트링에 고정되지 않고 드롭 다운의 선택이 고정되지 않습니다.
필터뿐만 아니라 어떻게 페이지를 페이지에 넣을 수 있습니까?
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>
해결책
여기에 몇 가지 옵션이 있다고 생각합니다.
첫 번째는 ajax를 사용하여 컨트롤러로 다시 호출하여 "PAGED"객체 컬렉션을 다시 가져 오므로 출력을 필터링 할 때마다 필터 ID를 포스트 백마다 원하는 페이지에 필요한 결과 컬렉션 만 가져옵니다. Ajax로 페이징을하고 Ajax 호출로 필터 ID를 다시 전달할 수 있으므로 필터링 및 페인트 객체를 다시 가져 오거나 아래 설명 된 페이징에서 다른 URL로 리디렉션 할 수 있습니다.
드롭 다운에서 값을 변경할 때 서버로 전체 페이지 포스트백을 사용하는 경우 필터 ID가있는 다른 URL로 사용자를 리디렉션 할 수 있습니다. 문제/필터/1
이 방법으로 페이징 링크를 사용할 때마다 문제/필터/1? Page = 6과 같은 URL로 끝나고 필터를 잃지 않습니다.
페이지보기는 다를 필요가 없습니다.
기능이 동일하게 끝나지만이 질문에 대한 답은 아래의 의견에 있으며 여기에 쉽게 게시했습니다.
<%= Html.Pager(ViewData.Model.PageSize, ViewData.Model.PageNumber, ViewData.Model.TotalItemCount, new { categoryname = ViewData["CategoryDisplayName"] } )%>