动态添加的LinkBut​​ton CommandName / CommandArgument设置被删除

时间:2012-01-06 20:50:09

标签: c# asp.net linkbutton

我正在尝试在表格上方实现分页栏。我的页面上有一个静态<ul>元素:

<div><center><ul id="topnav" runat="server"></ul></center></div>

在我的Page_Load事件中,我尝试使用页码加载它:

foreach ( int linkpage in linkpages ) {
  HtmlGenericControl li;
  LinkButton pbut;
  li = new HtmlGenericControl( "li" );
  pbut = new LinkButton();
  pbut.CommandName = "page";
  pbut.CommandArgument = linkpage.ToString();
  pbut.Text = linkpage.ToString();
  li.Controls.Add( pbut );
  topnav.Controls.Add( li );
}

但是,当实际呈现控件时,它会以名称'ctlXX'(其中XX是递增的数字)发布并且没有参数,因此我无法获取页码。但是,.Text属性呈现正常。我究竟做错了什么?这完全是错误的做法吗?

1 个答案:

答案 0 :(得分:1)

如果要动态添加按钮,则需要在Page_Init方法中执行此操作,否则控件将不会参与ViewState。可能是问题所在。当然它无济于事。

此名称也是.Net动态分配给按钮的名称,因为您没有自己指定ID。如果您正在寻找的话,那就是Request.Form集合中可见的ID。

但是 - 我认为你的做法是诚实的。如果你想要分页,那么你应该看一下GridView或ListView控件,它在控件中内置了分页。那将是更加标准的做事。 GridView分页解释了here和ListViews的一般教程,包括分页here

一般来说,分页是一个在ASP.Net中已经解决过很多次的问题,你真的不想重新发明轮子 - 我不会。此外,通过使用这些类型的网格控件,您可以获得开箱即用的选项 - 另一个非常常见的要求。