天天看點

【自然架構】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重寫,可不可以,我還沒有考慮好。

補充:

代碼編寫也是非常簡單的,和Postback分頁相比,隻是多了一個屬性的設定,把Pager1.PagerTurnKind 這個屬性為PagerTurnKind.PostBackURL 。

其他的完全可以按照postback分頁的方式和習慣來做。 

【自然架構】QuickPager分頁控件,新增一種分頁方式——僞URL分頁(Postback版)
【自然架構】QuickPager分頁控件,新增一種分頁方式——僞URL分頁(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;

    }

繼續閱讀