我修改了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中。
答案 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的事件处理程序之前被调用..所以,你真的不能指望它被改变了。