MVCアプリケーションでページネーションとフィルタリングを行う方法

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

質問

martijn Boland's ページへ。

ページ番号をクリックすると、アプリのURLが変わります:

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

これまでのところとても良い。

問題は、変更時に送信するドロップダウンリストを追加すると、ページングやフィルターができないことです。

ドロップダウンを変更する場合は、queryIdにprojectIdを渡す必要があります。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>
役に立ちましたか?

解決

ここにはいくつかのオプションがあると思います。

最初の方法は、Ajaxを使用してコントローラーにコールバックし、「Paged」を取得することです。出力をフィルタリングするたびに、フィルタIDをポストバックして、目的のページに必要な結果コレクションのみを取得します。 Ajaxでページングを行うこともできますし、Ajax呼び出しでフィルターIDを渡すことで、フィルター処理されページングされたオブジェクトを取得するか、以下で説明するページングで別のURLにリダイレクトできます。

ドロップダウンの値を変更する際にサーバーへの全ページポストバックを使用する場合、フィルターIDを含む別のURLにユーザーをリダイレクトできます。 Issue / Filter / 1

この方法では、ページングリンクが使用されるたびに、Issue / Filter / 1?page = 6のようなURLになり、フィルターを失うことはありません。

ページの表示は変更する必要がないことに注意してください。

関数は同じものになりますが、この質問に対する答えは下のコメントにあり、簡単にここに投稿できます。

<%= Html.Pager(ViewData.Model.PageSize, ViewData.Model.PageNumber, ViewData.Model.TotalItemCount, new { categoryname = ViewData["CategoryDisplayName"] } )%>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top