C# ASP.NET控件渲染管道

C# ASP.NET控件渲染管道,c#,asp.net,controls,rendering,pipeline,C#,Asp.net,Controls,Rendering,Pipeline,我正在构建的寻呼机控件有问题。我的代码如下 protected override void CreateChildControls() { base.CreateChildControls(); pnl = new Panel { ID = "NewsPager", CssClass = "NewsPager" }; Controls.Add(ddl); AddPagerControls(); } AddPagerControl添加一组使用相同事件处理程序的链接按钮: pr

我正在构建的寻呼机控件有问题。我的代码如下

protected override void CreateChildControls()
{
  base.CreateChildControls();

  pnl = new Panel { ID = "NewsPager", CssClass = "NewsPager" };
  Controls.Add(ddl);

  AddPagerControls();
}
AddPagerControl添加一组使用相同事件处理程序的链接按钮:

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);
i、 e.如果当前页面为2,则调试代码时“Next”按钮的CommandArgument将为3。 但是,当页面呈现完毕,我单击“下一步”按钮时,它将工作一次(从第1页转到第2页),但随后它将始终为2,即使在代码中它被设置为3。因此,在呈现控件时必须发生一些事情

我在这里有点不知所措。我尝试将CreateChildControls中对AddPagerControls的调用更改为if(!Page.IsPostBack){AddPagerControls();},但是事件处理程序根本不会启动

Edit:p.S.I在从事件处理程序调用AddPagerControl方法时执行pnl.Controls.Clear(),否则将添加两次链接按钮

编辑:p.p.S.我重新计算了每次要添加的链接按钮,因为如果存在多个页面,我只需要显示5个链接,即


>>

我不明白的是,为什么您总是重新生成分页控件。您是否可以使用一种方法,即使用链接按钮“prev”和“next”,并在控件的viewstate(作为单独的属性)中维护当前正在查看的页面和项目数量(即页面大小)


然后在事件处理程序中执行正确的操作,因为您知道当前页面将类似于
currentPageIndex+1
或类似的内容。在我看来,始终重新生成上一个/下一个按钮,特别是在l
i_Click
处理程序中,这不是一个好方法,这也可能会导致您出现问题。

已经尝试过了,即使liNext LinkButton始终存在,在需要时使其可见并在事件处理程序中仅设置CommandArgument会产生相同的结果,我可以单击任何链接一次,然后它停止工作,就好像控件在控件树或其他东西之外(不可能,我知道…)“停止工作”是指没有调用事件处理程序吗?不完全是,我的意思是,上一个/下一个链接将始终保留单击一次后获得的值,任何数字值也是如此。分页器在sharepoint中用于分页使用ObjectDataSource的DataFormWebPart。这就是为什么该控件需要“全包”,即从自包含的数据源呈现自身。我认为问题在于,数字链接应该在单击其中一个链接后更改,即控件树更改,但这些更改不会在页面中呈现。。。。