• ASP.NET MVC实践系列8对查询后分页处理的解决方案


    一、前言:

    GridView中的分页是用post做的,所以将查询表单中的内容可以存到ViewState中,翻页的时候可以利用,实现起来就比较容易些,而在mvc中这些就要我们自己来做了,Contrib中的分页只能应付简单应用,对于查询后结果的分页没做处理,下面我们来改造一下这个分页程序。

    二、准备工作

    首先准备一个数据源

    数据源准备

    然后添加一个View:

    View

    这里的分页代码和Contrib中略有不同,一会儿我们来讲解这个不同的原因。

    添加一个Controller:

    Controller

    注:这部分内容的详细讲解可以参见:ASP.NET MVC实践系列7-Grid实现(下-利用Contrib实现)

    三、Contrib的分页源码分析

    我们先把Pagination和Pager两个文件夹中的源码copy出来,经过分析我们知道CustomPagination是实现了IPagination接口的集合,我们把数据整合到CustomPagination中就可以使用Pager进行分页了,PaginationExtensions是辅助HtmlHelper使用扩展方法的静态类。

    四、Pager类改造

    经过分析我们发现Pager是通过ToString()方法将分页字符串输出到前台的,所以我们这里需要先改造Pager的ToString()方法。我们常常希望分页是这样显示的:

     上一页  1  2 3 4 5 6 下一页,所以先将ToString()方法改造如下:

    ToString方法

    这里需要交代一下将要实现查询分页的原理,这个方案中我们将会把查询的信息附加到分页的Url上,首先我们会把需要附加的条件添加到一个Dictionary<string, string>类中,然后传给Pager类进行处理。

    下面我们来改造一下CreateQueryString方法:

    CreateQueryString

    这里边主要添加的就是这个GetSearchPage方法,这个方法就是根据客户端传入的查询条件来组织显示分页字符串的。

    五、缺点:

    因为时使用附加url的方式实现的,所以对于查询条件过多的时候可能有问题,有空我会再实现一个post方案供大家参考。另外这里大家还需要注意的就是url中的查询字符串的名字不能重复,如果重复会直接被替换,详见源码。

    六、源码下载

    我的ASP.NET MVC实践系列

    ASP.NET MVC实践系列1-UrlRouting

    ASP.NET MVC实践系列2-简单应用

    ASP.NET MVC实践系列3-服务器端数据验证

    ASP.NET MVC实践系列4-Ajax应用

    ASP.NET MVC实践系列5-结合jQuery

    ASP.NET MVC实践系列6-Grid实现(上)

    ASP.NET MVC实践系列7-Grid实现(下-利用Contrib实现)

    其他:

    在ASP.NET MVC中对表进行通用的增删改

  • 相关阅读:
    codevs2606 约数和问题
    UOJ150 运输计划
    codevs1279 Guard 的无聊
    codevs1997 守卫者的挑战
    codevs1291 火车线路
    codevs1217 借教室
    codevs1281 Xn数列
    codevs1218 疫情控制
    codevs1199 开车旅行
    BZOJ1941 [Sdoi2010]Hide and Seek
  • 原文地址:https://www.cnblogs.com/nuaalfm/p/1605364.html
Copyright © 2020-2023  润新知