专栏首页更流畅、简洁的软件开发方式【自然框架】QuickPager分页控件,新增一种分页方式——伪URL分页(Postback版)

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

适用场景

  先说一下伪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分页的方式和习惯来做。 

代码
/// <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
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【开源】QuickPager 分页控件的内部结构,和OO原则与设计模式

    关键字:提出需求、需求分析、原则、设计模式、索引      先说一下讨论的范围:使用数据库保存信息的项目,b/s结构,asp.net编写。请不要讨论这个范围之外...

    用户1174620
  • 我的网站的结构说明

    不知道大家有没有看懂这个图。这个是我的网站(不包括后台管理)的结构图。基本上和三层架构有些相似,但是有三个不同的地方:    一、 数据访问层。 1、数据访问层...

    用户1174620
  • ES6(三) Promise 的基本使用方式

    关于Promise的资料,网上有很多了,这里简单粗暴一点,直接上代码。 假设我们要做一个访问后端API的函数,那么我们可以这样模拟一下。

    用户1174620
  • SignalR主动通知订阅者示例

    关键点:GlobalHost.ConnectionManager.GetHubContext

    旺财的城堡
  • [原创程序]随机语录开源

      这个程序是很久以前写工具站时候写的,后面又写了新版本的语录系统,鉴于有人需要,开源旧版本的随机语录。

    雨落凋殇
  • 小程序 · 一周报

    小程序及小游戏代码审核将在2019年春节法定假期2月4日(除夕)至2月10日(初六)暂停审核。在2019年1月31日前提交的审核,审核团队将竭力在2月4日(除夕...

    极乐君
  • Selenium爬虫-获取浏览器Network请求和响应

    自从发现 Selenium 这块新大陆后,许多异步加载、js加密、动态Cookie等问题都变得非常简单,大大简化了爬虫的难度。

    jhao104
  • 小程序一周报

    极乐君
  • 微信小游戏数据分享2

    小卜目前每天的新进在逐步上升,昨天的新进大概4k左右,留存掉到10%,大概和玩家年龄层发生变化有关。

    沙因Sign
  • 腾讯和香格里拉打造的“智慧酒店”,每一个场景都像科幻片

    借助腾讯云人脸识别及物联网技术,打通酒店系统、公安系统数据,在酒店前台“刷个脸”即可完成身份核验,帮助顾客简化入住流程。

    腾讯云互联网TechDay

扫码关注云+社区

领取腾讯云代金券