1. 程式人生 > 其它 >【自然框架】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
    }