如何在MVC应用程序中进行分页和过滤

时间:2009-07-30 22:15:57

标签: asp.net-mvc pagination filtering

我正在使用示例martijn Boland's来分页。

当我点击页码时,我的应用的网址会发生变化:

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

到目前为止一切顺利。

问题是当我添加一个提交更改的下拉列表时,我无法进行页面过滤。

如果我更改了我的下拉列表,我应该在querysting中传递projectId,我的partail视图将刷新并显示我过滤后的recoreds。
现在,当我的页面过滤器参数不会粘在查询字符串中以及我的下拉列表中的选择不会粘住。

如何进行分页以及过滤?

的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 个答案:

答案 0 :(得分:1)

我认为你有几个选择。

第一个将使用Ajax回调控制器以获取“分页”对象集合,因此每次过滤输出时都会回发过滤器ID以仅获取页面所需的结果集合想。您可以使用Ajax进行分页,并使用Ajax调用传回过滤器ID,这样您就可以获得过滤后的分页对象,或者您可以重定向到下面解释的其他分页URL。

如果您在更改下拉列表中的值时使用整页回发到服务器,那么您可以将用户重定向到另一个带有过滤器ID的URL,例如。问题/过滤/ 1

这种方式每次使用分页链接时,你都会得到一个像Issue / Filter / 1?page = 6这样的网址,你不会丢失过滤器。

请注意,页面视图无需更改。

所有功能虽然结果相同但这个问题的答案在下面的评论中并在此处发布以便于使用。

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