页面生命周期问题
问题描述:
问题已由我修改以显示完整图片。页面生命周期问题
我有一个基本的问题:
后面的代码:
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事件,我想到的是点击LinkButton的后获得新的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);
}
答
你可以把美孚(PageIndex的)在Page_LoadComplete事件,而不是Page_Load中,即
protected void Page_LoadComplete(object sender, EventArgs e)
{
Foo (PageIndex);
}
LoadComplete事件后,控制事件引发。
编辑: LoadComplete是最早的地方,您可以安全地访问新的pageindex,也可以在那里添加另一个控件,但在PreRender中也可以。
+1。 “PreRender”是最理想的位置恕我直言。 – 2010-03-24 13:07:56
你也可以使用Page_LoadComplete而不是在PreRender – Greg 2010-03-24 13:09:26
请参阅我的更新 – toraan 2010-03-24 13:18:36