asp.net动态linkBut​​tons点击事件问题

时间:2010-07-07 13:35:48

标签: c# asp.net asp.net-ajax

我有asp.net页面,我有占位符和一个按钮。单击按钮后,我想在我的占位符上显示几个LinkBut​​tons,我希望将specyfic处理程序连接到我的LinkBut​​tons的click_event。

以下是代码:

protected void Button_Click(object sender, EventArgs e)

{

 for(...)
  {

  LinkButton l = new LinkButton();

  l.ID = "link" + i;

  l.Command += new CommandEventHandler(link_Command);

  PlaceHolder1.Controls.Add(l);

 }

} 

void link_Command(object sender, CommandEventArgs e)

        {
            PlaceHolder1.Controls.Clear();
            Label l = new Label();
            l.Text = e.CommandArgument.ToString();
            PlaceHolder1.Controls.Add(l);
        }

LinkBut​​tons将会显示,但它们的事件不会触发。我该怎么解决这个问题?我需要在Button_Click事件中生成LinkBut​​tons,因为只有这样我才能知道要创建多少个按钮。请帮忙。

3 个答案:

答案 0 :(得分:1)

我在编程的早期遇到的第一个问题之一,让我想起那些日子....它因为你试图动态创建/注入asp控件而ASP.Net使用ControlState和ViewState来检索回发后您在页面上放置的每个控件的状态。 在您的情况下,没有为您创建的每个LinkBut​​ton定义ControlState / ViewState,因为您实际上是动态创建它们。

我认为解决这个问题的简单方法可能是使用一些数据控件,例如.Repeater / GridView,它们可以无缝地处理ViewState问题。

另一种方法是探索和阅读控制状态(有点复杂)。

Reagards,

答案 1 :(得分:1)

问题是你在页面的初始渲染时添加LinkBut​​tons(当用户点击按钮时),但是当它回发时,它们还没有被重新创建,所以页面没有任何内容将click事件绑定到。如果是回发,则需要在Page_Load方法中再次创建它们。因此,您可能还需要存储一些用于确定如何在ViewState中创建LinkBut​​tons的信息,以便您可以在Page_Load中重新创建它们。执行此操作后,控件将可用于页面以将事件绑定到,并且将处理您的处理程序。

答案 2 :(得分:1)

当您单击创建的链接按钮时,它将回发页面。在每个帖子中,您必须重新创建linkbutton并重新绑定其事件处理程序。