【自然框架】QuickPager分页控件,新增一种分页方式——伪URL分页(Postback版)

简介: 适用场景   先说一下伪URL分页的适用场景。在网站的网页里实现查询功能,如果查询条件比较少的话,还比较好办,把查询条件放到URL里面传递即可。但是如果查询条件过多,就会照成URL的长度过长。既不好看,编写起来也很麻烦。

 
适用场景


  先说一下伪URL分页的适用场景。在网站的网页里实现查询功能,如果查询条件比较少的话,还比较好办,把查询条件放到URL里面传递即可。但是如果查询条件过多,就会照成URL的长度过长。既不好看,编写起来也很麻烦。如果查询条件是汉字的话,还有一个编码的问题。

 

Postback分页

 

  再看看现有的几种分页方式。Postback分页方式可以利用ViewState来很方便的保存查询条件,但是由于采用表单提交的方式实现,搜索引擎不能识别。这个对于网站来说,是一个很难接受的。

 

URL分页


  这个是通过URL里的参数来分页,搜索引擎可以识别,而且还能使用URL重写的方式。但是要保留查询条件就比较麻烦了,一般是通过把查询条件放到URL里面来传递,但是编写起来比较复杂。当然还有其他的方法来实现。

 

可能的方法

 

  您可能会说,对于一般的不用查询的分页显示数据的需求,可以URL分页来实现。而对于需要查询的需求,我们在换成Postback的分页方式。

 

  这个是可以的,但是也不太方便。

 

  那么能不能方便的把Postback分页和URL分页的优点结合起来呢?自然框架里的QuickPager分页控件新增了一种“伪URL分页”的方式(不知道有没有其他人也是实现了类似的方法)。这种新的方式结合了Postback分页和URL分页的优点。

 

伪URL分页

 

  看起来像URL分页,当鼠标放在“下一页”(其他也类似)上面,会显示xxx.aspx?page=3这类的信息。但是实际上他是Postback的分页。

 

 

伪URL分页的连接方式:

 

< a   href ="PsotURL.aspx?page=7"  onclick ="javascript:__doPostBack('Pager1',7);return false;" > 下一页 </ a >

 

 

Postback的连接方式:

< a   href ="javascript:__doPostBack('Pager1',2)" > 下一页 </ a >

 


 

 

  对比看一下就可以发现原理。其实也很简单,postback是在href里面调用js函数,而伪URL改成了在onclick里面调用js函数,这样herf就可以“节省”出来,我们“伪装”一下,加上页号的参数即可。然后在onclick里面写上return false,“禁用”herf。

 

  您可能会问了,如果直接在地址栏里面输入“PsotURL.aspx?page=7”会如何?当然是显示第7页的数据了(前提是有第七页)。如果做不到这一点的话,也就无法“欺骗”搜索引擎了。

 

  另外伪URL分页还可以保留URL里面的参数,比如需要按照商品分类显示数据,URL里要有kind=3这样的参数,那么可以直接加在URL里面,连接里会自动加上kind=3的。

 

思维扩展

  这种方式也可以变成伪URL分页ajax版。就是说实质上用的ajax分页,但是为了照顾搜索引擎,可以加上一个连接给搜索引擎看。至于URL重写,可不可以,我还没有考虑好。

 

  在线演示:http://demo.naturefw.com/Nonline/QuickPager/default.aspx

 

    源代码和演示的代码 下载地址:http://www.naturefw.com/nature/down.aspx


 

补充:

代码编写也是非常简单的,和Postback分页相比,只是多了一个属性的设置,把Pager1.PagerTurnKind 这个属性为PagerTurnKind.PostBackURL 。

其他的完全可以按照postback分页的方式和习惯来做。 

 

 

img_405b18b4b6584ae338e0f6ecaf736533.gif 代码
///   <summary>
    
///  伪URL分页
    
///   </summary>
     public   partial   class  PsotURL : System.Web.UI.Page
    {
        
#region  初始化
        
protected   override   void  OnInit(EventArgs e)
        {
            
base .OnInit(e);

            
// 数据访问函数库的实例 
            Pager1.DAL  =  Data.DALFactory.CreateDAL();

            
// 设置显示数据的控件
            Pager1.ShowDataControl  =   this .GV;

            
// 定义QuickPager_SQL,设置Page属性
            Pager1.PagerSQL.Page  =   this ;
            
            
// 设置成PostBackURL的分页方式
             this .Pager1.PagerTurnKind  =  PagerTurnKind.PostBackURL;

        }
        
#endregion

        
protected   void  Page_Load( object  sender, EventArgs e)
        {
            
if  ( ! Page.IsPostBack)
            {
                SetPagerInfo();         
// 设置表名、字段名等
            }

        }

        
#region  给QuickPager_SQL 设置属性,以便拼接SQL
        
private   void  SetPagerInfo()
        {
            Pager1.PagerSQL.TableName 
=   " Person_User_ViewLog " ;               // 表名或者视图名称
            Pager1.PagerSQL.TableShowColumns  =   " UserCode as 用户,substring(IP,0,6) + '...' as IP ,访问时间,URL as 访问页面 " ;     // 需要显示的字段
            Pager1.PagerSQL.TablePKColumn  =   " LogID " ;              // 主键名称,不支持复合主键
            Pager1.PagerSQL.TableOrderByColumns  =   " LogID desc  " // 排序字段,根据分页算法而定,可以支持多个排序字段
            Pager1.PagerSQL.TableQuery  =   "" ;                       // 查询条件

            Pager1.PageSize 
=   4 ;                                   // 一页显示的记录数
            Pager1.NaviCount  =   8 ;

            
// 设置分页方式
            Pager1.PagerSQL.SetPagerSQLKind  =  PagerSQLKind.Max_TopTop;



        }
        
#endregion
    }

 

 

相关文章
|
6月前
|
前端开发 Java 开发者
在Spring框架中,`PathMatcher`是用于进行URL路径匹配的接口
在Spring框架中,`PathMatcher`是用于进行URL路径匹配的接口
177 6
|
安全 测试技术 Python
Tornado框架的异步代码单元支持同步获取URL在项目里实战的心得和方法
Tornado框架的异步代码单元支持同步获取URL在项目里实战的心得和方法
159 0
|
SQL Java 数据库连接
分页之查询条件保存到 PageBean 的 url 中| 学习笔记
快速学习分页之查询条件保存到 PageBean 的 url 中
176 0
|
SQL 算法
分页解决方案 之 QuickPager的使用方法(URL分页、自动获取数据)
      适用范围:网站前台页面 等,从关系型数据库里提取数据,愿意使用Pager_SQL、DataAccessLibrary的情况。       优点:使用URL的方式,对于SEO比较友好。
968 0
|
JavaScript 前端开发 .NET
艾伟:重提URL Rewrite(3):在URL Rewrite后保持PostBack地址
  在进行了URL Rewrite之后,经常会遇到的问题就是页面中PostBack的目标地址并非客户端请求的地址,而是URL Rewrite之后的地址。以上一篇文章中的重写为例:     rewriter>   当用户请求“/User/jeffz”之后,页面中的出现的代码却会是 ,这是因为在生成代码时,页面会使用当前Request.Url.PathAndQuery的值来得到form元素的action。
1028 0
x3d
|
前端开发
找到MVC框架中前端URL与后端同步的解决方案
基本思路: 先用URL标签生成完整的URL字符,前端动态参数的部分以适配符先填充,最后动态参数利用正则匹配进行替换。 这种方式,可以在各种MVC框架中适用,妙。 不废话,上码。   var url = "{url app=xxxxn&act=yyy&id=[0]}"; url = url.
x3d
964 0
|
PHP
PHP 分页URL设计
2013年3月11日 21:08:06 之前的分页是http://http://www.cnblogs.com/iLoveMyD/xxx.html?page=123&.... 现在是http://http://www.
934 0