页面生命周期问题

问题描述:

问题已由我修改以显示完整图片。页面生命周期问题

我有一个基本的问题:

后面的代码:

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。

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

两个选项


    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

你会的,但Page_Load会在链接按钮的事件处理程序之前被调用。所以,你不能真正期望它被改变。

+0

什么解决办法? – toraan 2010-03-24 12:56:13

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

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

LoadComplete事件后,控制事件引发。

编辑: LoadComplete是最早的地方,您可以安全地访问新的pageindex,也可以在那里添加另一个控件,但在PreRender中也可以。