2012-01-11 48 views
0

我已經創建了一個自定義分頁類 - Pagger - 爲實現分頁控件的分頁。自定義分頁回傳後讀取動態控件的值

現在,Pagger對象生成包含導航btns一個ASP:Panel - ASP:LinkButton - 即負責導航,每個BTN它裏面存儲產生的pageNumber它必須導航到

實施例:
enter image description here

爲了增強分頁功能,我使用了Ajax - ASP:UpdatePanel - 來圍繞paging panel,
現在,每個btn's clickPostBack發生,所以我重新創造了所有的btnsOnPreInit頁面事件,讓他們可以再次使用 - 即是明顯的,而不是將以下問題

protected override void OnPreInit(EventArgs e) 
    { 
     Pagger p = new Pagger(itemsCount, itemsPerPage); 

     //Here the pager reads from viewstate to know 
     //which pageNumber is the currentPage and generates btns according to it 
     p.GeneratePaggerPanel(CurrentPageNumber); 
     Panel1.Controls.Add(p.PaggerPanel); 

     //link the LinkBtn to event handler to be executed upon clicking 
     foreach (Control c in p.PaggerPanel.Controls) 
     { 
      if (c is LinkButton) 
      { 
       ((LinkButton)c).Click += Button1_Click; 
      } 
     } 
     base.OnPreInit(e); 
    } 

現在,爲了知道哪些pageNumberre-creating日是currentPageNumber我去把它存儲在ViewState

public uint CurrentPageNumber 
    { 
     get 
     { 
      if (ViewState["CurrentPageNumber"] != null) 
       return (uint)ViewState["CurrentPageNumber"]; 
      return 1; 
     } 
     set 
     { 
      ViewState["CurrentPageNumber"] = value; 
     } 
    } 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    CurrentPageNumber = ((PaggerLinkButton)sender).Tag; 
} 

btnEvent Click觸發page_load後,多數民衆贊成意味着ViewState不會是可用Ëpager btnsOnPreInit事件
我怎麼能設置由初始化pager btns panel,使尋呼機可以使用相同的PostBackcurrentPageNumber而不要等到做另一PostBack前閱讀pressed btn's valueViewState價值?

我也讀過ASP.NET Page Life Cycle Overview,但沒有什麼幫助。

P.S .:的PaggerLinkButtonLinkButton繼承了一個新的屬性Tag

回答

0

你有幾個選項(即我能想到)。

  1. 將服務器端Button1_click方法替換爲您的鏈接按鈕的客戶端單擊事件處理程序。此客戶端方法應將頁面值設置爲表單上的隱藏控件。請注意,您不需要使用tag屬性定製linkbutton類。只需在客戶端設置頁面值onclick處理程序代碼(類似於OnClick ='setPageNo(x); return true;')。然後在OnPreInit中從隱藏的控件中獲取當前頁面的編號。

  2. 我不知道你爲什麼重新創建PaggerPanel控件在每個回發(而不是依賴viewstate),但是,你應該能夠將GeneratePaggerPanel方法中的邏輯分開到(a)Panel creation myPanel = p.GeneratePaggerPanel ()在OnPreInit中完成,(b)在Button1_click方法中完成的當前頁面特定更改p.FixPaggerPanel(myPanel,CurrentPageNo)。

希望這有助於 歡呼聲, 尼克