0

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

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

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

  AddPagerControls();
}

AddPagerControls 添加了一堆使用相同事件处理程序的 LinkBut​​tons:

private void li_Click(object sender, EventArgs e)
{
  selectedValue = ((LinkButton) sender).CommandArgument;
  AddPagerControls();
}

现在发生的事情是,当我添加“下一个”链接按钮时,它会使用以下命令正确设置 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();} 但事件处理程序根本不会触发。

编辑:当从事件处理程序调用 AddPagerControls 方法时,PSI 执行 pnl.Controls.Clear() ,否则 LinkBut​​tons 将被添加两次。

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

<< < 2 3 4 5 6 7 > >>

4

1 回答 1

0

我不明白的是为什么您一直在重新生成分页控件。难道你不能只使用一种方法,你有你的链接按钮“上一个”和“下一个”,你在你的控件的视图状态(作为单独的属性)中维护正在查看的当前页面和项目的数量(即页面大小)?

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

于 2009-06-23T09:25:43.083 回答