我正在构建一个寻呼机控件的问题。我的代码如下
protected override void CreateChildControls()
{
base.CreateChildControls();
pnl = new Panel { ID = "NewsPager", CssClass = "NewsPager" };
Controls.Add(ddl);
AddPagerControls();
}
AddPagerControls添加了一堆使用相同事件处理程序的LinkButtons:
private void li_Click(object sender, EventArgs e)
{
selectedValue = ((LinkButton) sender).CommandArgument;
AddPagerControls();
}
现在发生的是当我添加“Next”LinkButton时,它使用以下命令正确设置CommandArgument:
var liNext = new LinkButton {ID = "NewsPagerLinkNext", Text = ">", CommandArgument = (int.Parse(value) + 1).ToString()};
liNext.Click += new EventHandler(li_Click);
pnl.Controls.Add(liNext);
即。如果当前页面为2,则在调试代码时,“Next”按钮的CommandArgument将为3。 但是,当页面已经渲染并且我单击下一个按钮时它将工作一次(从第1页到第2页)但是它总是2,即使在代码中它被设置为3.所以当控件必须发生时渲染。
我在这里有点不知所措。我尝试将对CreateChildControls中的AddPagerControls的调用更改为if(!Page.IsPostBack){AddPagerControls();}但是事件处理程序根本不会触发。
编辑: P.S.I从事件处理程序调用AddPagerControls方法时执行pnl.Controls.Clear(),否则将添加两次LinkButtons。
编辑:P.P.S。我重新确认每次添加哪个链接按钮,因为如果存在更多页面,我只需要显示5个链接,即
<< < 2 3 4 5 6 7> >>
答案 0 :(得分:0)
我不明白为什么你一直重新生成分页控件。难道你不能只使用你的链接按钮“prev”和“next”的方法,你在你的控件的视图状态(作为单独的属性)维护正在查看的当前页面和项目的数量(即页面大小)?
在事件处理程序中,您可以执行正确的操作,因为您知道当前页面将类似currentPageIndex+1
或类似的内容。从我的角度来看,重新生成prev / next按钮,特别是在l i_Click
处理程序中并不是一个好方法,这也可能导致你的问题。