页面生命周期问题

时间:2010-03-24 12:51:55

标签: asp.net

我修改了qustion以显示完整的图片。

我有一个基本问题:

代码背后的代码:

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事件,我希望在点击链接按钮后获得新的PageIndex。

更新
我的Foo根据提供的页面索引为页面添加了新的控件,所以我想我不能把它放在Prerender中。

3 个答案:

答案 0 :(得分: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);  
  }

答案 1 :(得分:2)

你可以在Page_LoadComplete事件中放置Foo(PageIndex)而不是Page_Load,即

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

在控制事件之后引发LoadComplete事件。

编辑: LoadComplete是您可以安全访问新pageindex的最早的地方,也可以添加其他控件,但在PreRender中也是如此。

答案 2 :(得分:0)

你会,但是Page_Load会在linkbutton的事件处理程序之前被调用..所以,你真的不能指望它被改变了。