2010-03-24 152 views
1

問題已由我修改以顯示完整圖片。頁面生命週期問題

我有一個基本的問題:

後面的代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
    int firstPageIndex = 0; 
    int lastPageIndex = 5; 


    if (TotalPageNumber > 5) 
    { 
      if ((TotalPageNumber - PageIndex) <= 5) 
      firstPageIndex = TotalPageNumber - 5; 

     firstPageIndex = PageIndex < 3 ? 0 : PageIndex - 2; 
    } 
    else 
    { 
     firstPageIndex = 0; 
     lastPageIndex = TotalPageNumber; 
    } 


    for (int i = firstPageIndex; i < firstPageIndex + lastPageIndex; i++) 
    { 
     LinkButton lnk = new LinkButton(); 
     lnk.CommandArgument = i.ToString(); 
     lnk.Click += new EventHandler(lblPageNumber_Click); 
     lnk.ID = "lnkPage" + (i + 1).ToString(); 
     lnk.Text = (i + 1).ToString(); 
     plcPagerHolder.Controls.Add(lnk); 
    } } 

    int _pageIndex; 
    public int PageIndex 
    { 
     get 
     { 
      object objPage = ViewState["_pageIndex"]; 

      if (objPage == null) 
      { 
       _pageIndex = 0; 
      } 
      else 
      { 
       _pageIndex = (int)objPage; 
      } 

      return _pageIndex; 
     } 
     set {ViewState["_pageIndex"] = value; } 
    } 



    protected void lnkPagerNext_Click(object sender, EventArgs e) 
{ 
    PageIndex = PageIndex == TotalPageNumber - 1 ? 0 : PageIndex + 1; 
    } 

問題是與Page_Load事件,我想到的是點擊LinkBut​​ton的後獲得新的PageIndex。

更新:
我美孚增加了新的控制頁面的基礎上,提供頁面索引,所以我想我不能把它的預渲染。

回答

4

兩個選項


    protected void Page_Load(object sender, EventArgs e) 
    { 
    if (!Page.IsPostBack) 
    { 
     Foo (PageIndex);  
    } 
    } 

    protected void LinkButton_Click(object sender, EventArgs e) 
    {     
     PageIndex = int.Parse(((LinkButton)sender).CommandArgument); 
     Foo (PageIndex); 
    } 


    protected void Page_PreRender(object sender, EventArgs e) 
    {     
     Foo (PageIndex); 
    } 
+0

+1。 「PreRender」是最理想的位置恕我直言。 – 2010-03-24 13:07:56

+0

你也可以使用Page_LoadComplete而不是在PreRender – Greg 2010-03-24 13:09:26

+0

請參閱我的更新 – toraan 2010-03-24 13:18:36

0

你會的,但Page_Load會在鏈接按鈕的事件處理程序之前被調用。所以,你不能真正期望它被改變。

+0

什麼解決辦法? – toraan 2010-03-24 12:56:13

2

你可以把美孚(PageIndex的)在Page_LoadComplete事件,而不是Page_Load中,即

protected void Page_LoadComplete(object sender, EventArgs e) 
{ 
    Foo (PageIndex);  
} 

LoadComplete事件後,控制事件引發。

編輯: LoadComplete是最早的地方,您可以安全地訪問新的pageindex,也可以在那裏添加另一個控件,但在PreRender中也可以。