我有asp.net页面,我有占位符和一个按钮。单击按钮后,我想在我的占位符上显示几个LinkButtons,我希望将specyfic处理程序连接到我的LinkButtons的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);
}
LinkButtons将会显示,但它们的事件不会触发。我该怎么解决这个问题?我需要在Button_Click事件中生成LinkButtons,因为只有这样我才能知道要创建多少个按钮。请帮忙。
答案 0 :(得分:1)
我在编程的早期遇到的第一个问题之一,让我想起那些日子....它因为你试图动态创建/注入asp控件而ASP.Net使用ControlState和ViewState来检索回发后您在页面上放置的每个控件的状态。 在您的情况下,没有为您创建的每个LinkButton定义ControlState / ViewState,因为您实际上是动态创建它们。
我认为解决这个问题的简单方法可能是使用一些数据控件,例如.Repeater / GridView,它们可以无缝地处理ViewState问题。
另一种方法是探索和阅读控制状态(有点复杂)。
Reagards,
答案 1 :(得分:1)
问题是你在页面的初始渲染时添加LinkButtons(当用户点击按钮时),但是当它回发时,它们还没有被重新创建,所以页面没有任何内容将click事件绑定到。如果是回发,则需要在Page_Load方法中再次创建它们。因此,您可能还需要存储一些用于确定如何在ViewState中创建LinkButtons的信息,以便您可以在Page_Load中重新创建它们。执行此操作后,控件将可用于页面以将事件绑定到,并且将处理您的处理程序。
答案 2 :(得分:1)
当您单击创建的链接按钮时,它将回发页面。在每个帖子中,您必须重新创建linkbutton并重新绑定其事件处理程序。