我使用的示例 martijn Boland的到页面。

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

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

到目前为止一切顺利。

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

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

如何进行分页以及过滤?

<强>的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回叫控制器以获得“分页”。对象集合返回,因此每次过滤输出时,都会回发过滤器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"] } )%>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top